2016-06-10 3 views
0

Я использовал пропустить перед действием, чтобы приложение разрешало использовать четыре страницы (client_details, client_process, login, validate_login). Но действие не работает, как я ожидал. Это не позволяет пользователю войти в систему. Я не знаю, почему. Пожалуйста, помогите.Пропустить, прежде чем действие не будет пропущено в Rails 4

Мой контроллер Пользователи,

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 

Мой контроллер приложений,

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

Является ли 'check_session' определенно называемым, или это может быть побочным эффектом чего-то еще? Попробуйте использовать 'raise' или' puts' в начале 'check_session', если вы не уверены. – tombeynon

+0

вызывается check_session. Посмотрите на журнал моего сервера. Начато GET «/ users/client_page» для 192.168.1.102 в 2016-06-10 16:48:46 +0530 Невозможно отобразить консоль с 192.168.1.102! Разрешенные сети: 127.0.0.1, :: 1, 127.0.0.0/127.255.255.255 Обработка пользователямиController # client_page как HTML Перенаправлено на http://192.168.1.59:3000/ ** Цепочка фильтра остановлена ​​как: check_session rendered или перенаправлено ** Завершено 302 Найдено в 2ms – kelvin

+0

Ahah, ваш skip_before_action не включает #client_page – tombeynon

ответ

0

Запись в журнале вы дали был ..

Обработка UsersController # client_page как HTML перенаправлены на 192.168.1.59 : 3000 Цепь фильтра остановлена ​​как: check_session оказана или перенаправлена ​​Завершено 302 Найдено в 2ms

Действие, вызываемое в вашем UserController, равно #client_page.

Ваш skip_before_filter не включает в себя #client_page

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

Поэтому #check_session всегда будет вызываться для #client_page действия.

Смежные вопросы