2016-06-10 6 views
0

Ich habe skip before action verwendet, so dass die Anwendung die vier Seiten erlauben sollte (client_details, client_process, login, validate_login). Aber die Aktion funktioniert nicht wie erwartet. Der Benutzer kann sich nicht anmelden. Ich weiß nicht warum. Bitte bitte helfen.Überspringe vor Aktion Überspringe nicht in Rails 4

Mein Benutzer Controller,

class UsersController < ApplicationController 
    skip_before_action :check_session, :only=>[:client_details,:client_process,:login,:validate_login] 
    require 'securerandom' 
    def client_details 
    @client=Client.new 
    end 

    def client_process 
    params.permit! 
    @client=Client.new(client_params) 
    if @client.save 
     Notify.scop(@client).deliver 
     flash[:notice] = " your infomation is registered,wait for approval" 
     redirect_to :action=> "login" 
    else 
     render "client_details" 
     flash[:notice] = "sorry..." 
    end 
    end 

    def login 
    @user=User.new 
    render :layout=>false 
end 

def validate_login 
    params.permit! 
    @user=User.where params[:user] 
    [email protected](:id)[0] 
    if not @user.blank? 
    @chk=User.where(:username=>params[:user][:username]).pluck(:role)[0] 
    @chk1=User.where(:username=>params[:user][:username]).pluck(:block_status)[0] 
    if @chk=="Admin" 
     if @chk1==nil 
     session[:user_id][email protected] 
     redirect_to :action=>"admin_page" 
     else 
     flash[:notice] = "sorry!... Administrator blocked you..." 
     redirect_to root_path 
     end 
    elsif @chk=="user" 
     redirect_to root_path 
    elsif @chk==nil 
     redirect_to :action=>"client_page" 
    end 
    else 
    flash[:notice] = "Enter valid username and password" 
    redirect_to root_path 
    end 
end 
end 

My Application Controller,

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
    before_action :check_session 
    def check_session 
    if session[:user_id].blank? 
     redirect_to root_path 
    end 
    end 
end 
+1

Wird 'check_session' definitiv aufgerufen, oder könnte dies ein Nebeneffekt von etwas anderem sein? Versuchen Sie, zu Beginn von 'check_session'' raise' oder 'puts' zu verwenden, wenn Sie sich nicht sicher sind. – tombeynon

+0

check_session wird aufgerufen. Schau dir mein Serverprotokoll an. Gestartet GET "/ users/client_page" für 192.168.1.102 am 2016-06-10 16:48:46 +0530 Kann Konsole nicht von 192.168.1.102 rendern! Erlaubte Netzwerke: 127.0.0.1, :: 1, 127.0.0.0/127.255.255.255 Verarbeitung von UsersController # client_page als HTML Umgeleitet zu http://192.168.1.59:3000/ ** Filterkette angehalten als: check_session gerendert oder umgeleitet ** Abgeschlossen 302 Gefunden in 2ms – kelvin

+0

Ahah, Ihre skip_before_action enthält nicht #client_page – tombeynon

Antwort

0

Der Protokolleintrag Sie war gab ..

Verarbeitung von Userscontroller # client_page als HTML 192.168.1.59 Weitergeleitet : 3000 Filterkette angehalten als: check_session gerendert oder umgeleitet Abgeschlossen 302 Gefunden in 2ms

Die in Ihrem UsersController aufgerufene Aktion lautet #client_page.

Ihre skip_before_filter nicht enthalten #client_page

skip_before_action :check_session, :only=>[:client_details,:client_process,:login,:validate_login] 

Daher wird #check_session immer für die #client_page Aktion aufgerufen werden.