2016-01-15 3 views
0

Ниже мой класс контроллера:Rails: Передайте PARAMS к before_filter authenticate_user

class PController < ApplicationController 

    before_filter authenticate_user! 

    def show 
    logger.info("I am now logged in") 
    if params.has_key?(:p) and params.has_key?(:t) 
     # Do something 
    end 

    end 
end 

Я хочу передать параметры GET в authenticate_user для обработки. При успешном входе вернитесь к тому же контроллеру вместе с параметрами. Пожалуйста, помогите мне узнать, как это достичь.

+0

Какого типа параметров вы прохождение? Параметры GET сохраняются в URL-адресе, поэтому теоретически сохранение URL-адреса должно дать вам параметры. Однако это может стать беспорядочным –

ответ

0

Разрабатывает уже делает это для вас, но если вы хотите сделать это самостоятельно, может быть создать другой метод для аутентификации пользователя, как следующее:

class PController < ApplicationController 

    before_filter :restrict_access 

    def show 
    logger.info("I am now logged in") 
    if params.has_key?(:p) and params.has_key?(:t) 
     # Do something 
    end 

    end 
end 



def restrict_access 
    user = User.find_by(email: params[:session][:email].downcase) 
    if user && user.authenticate(params[:session][:password]) 
     # Log the user in and redirect to the show page. 
    else 
     flash[:danger] = 'Invalid email/password combination' # Not quite right! 
     render 'login' 
    end 
    end 
end 
0

В идеале, мы будем хранить URL запроса на сессию, после успешного входа в систему, мы вернемся к этому URL-адресу. Для достижения этой цели, я определить некоторые функции в ApplicationController:

class ApplicationController < ActionController::Base 

    after_filter :store_location 

    # For devise  
    def after_sign_in_path_for(resource) 
    previous_url 
    end  

    private 

    def previous_url 
    url = session[:previous_url] 
    url.present? ? url : '/' 
    end 

    def store_location 
    # store last url - this is needed for post-login redirect to whatever the user last visited 
    # we will store only get request which doesn't have /user/ pattern and not a ajax request 
    should_store_url = request.get? && !request.path.include?('/users/') && !request.xhr? 
    session[:previous_url] = request.fullpath if should_store_url 
    end 
end 

Если мы используем Devise для аутентификации, Devise будет автоматически вызывать after_sign_in_path_for для нас, в противном случае, мы будем вручную вызвать это для того, чтобы вернуться к запросу перед тем регистрируясь.

для более подробной информации, мы можем пойти here, чтобы понять, почему мы должны переписать after_sign_in_path_for, чтобы заставить его работать (Да для Devise парней)

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