2016-11-02 2 views
0

У меня есть следующий код под projects_controller.rbпользователя Аутентифицировать в контроллере, а затем перенаправить

class Admin::ProjectsController < ApplicationController 
before_filter :require_login 

def require_login 
    while (adminLogin != 'username') 
    redirect_to admin_login_path and return 
    end 
end 

И это в application_controller.rb

class ApplicationController < ActionController::Base 

# Return the admin user 
def adminLogin 
    @email = params[:email] 
    @password = params[:password] 
    return @email 
end 
end 

Я пытаюсь получить электронную почту в этой форме и передать его на диспетчера проектов, поэтому, когда адрес электронной почты определен, администратор может войти в систему. Когда я нажимаю кнопку отправки в форме, я вижу, что правильное электронное письмо отправляется в контроллер проектов, используя <%= debug @email %> в форме, но страница перенаправляется на снова войдите в систему. Как я могу перейти в/проекты?

[UPDATE]:

application_controller.rb

class ApplicationController < ActionController::Base 
protect_from_forgery 

# Return the admin user 

def redirect_unless_admin 
@email = params[:email] 
password = params[:password] 
if (@email == 'username') 
    redirect_to admin_projects_path 
else 
    redirect_to admin_login_path 
end 

конец конец

и я требую этого метода в моем projects_controller.rb. Это просто ломает его, перенаправляет слишком много раз

ответ

1

Вы должны быть в состоянии пройти с этим в application_controller:

class ApplicationController < ActionController::Base 
    def redirect_unless_admin 
    email = params[:email] 
    password = params[:password] 
    if params[:email].present? && email == 'username' 
     redirect_to admin_projects_path 
    else 
     redirect_to root_path 
    end 
    end 
end 

и это в админ/projects_controller:

class Admin::ProjectsController < ApplicationController 
    before_filter :redirect_unless_admin 
end 

Таким образом, метод redirect_unless_admin доступен любому контроллеру, который наследует application_controller , Вы можете настроить логику так, как вам нужно, чтобы выяснить, какой перенаправление использовать, но это должно быть хорошей отправной точкой.

+0

Используя ваш точный код, я получаю «веб-сайт, перенаправленный слишком много раз», поэтому я не совсем уверен, что это правильно. Если я изменил свой метод на это '@email = 'username' redirect_to (@email == 'username'? Admin_projects_path: admin_login_path)' Он получает правильный адрес электронной почты и маршрутизацию в '/ admin/projects', но затем он сбой с снова слишком много раз исправляет ошибку –

+0

Прохладный, сделайте снимок сейчас. Возможно, он попытался слишком задуматься. Когда все остальное терпит неудачу, просто пойдите с добрым старым if/else :) –

+0

Пожалуйста, см. Мой комментарий выше с обновленным кодом ^^^ –

1

Если вам нужно вызвать adminLogin из ProjectController, он должен быть определен либо в ApplicationController, либо в общем родительском классе, который происходит из ApplicationController.

+0

Должен ли я помещать этот метод под applicationController? –

+0

См. Мой обновленный вопрос ^^^ –

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