Перенаправить Devise before_filter: authenticate_user для входа в путь - PullRequest
22 голосов
/ 01 декабря 2011

Я использую devise и у меня быстрый вопрос. Как я могу перенаправить: authenticate_user! before_filter на страницу регистрации пользователя вместо входа? Я прошел через https://github.com/plataformatec/devise/blob/master/lib/devise/controllers/helpers.rb, но мне не повезло, когда я нашел решение.

Ответы [ 3 ]

44 голосов
/ 30 сентября 2012

У меня была похожая проблема, когда мне нужно было перенаправить на регистрацию, если пользователь не вошел в систему. Я исправил это, добавив метод в application_controller.rb и используя его в качестве фильтра перед другими контроллерами.

Имейте в виду, что это скорее временное решение, потому что оно пропускает кучу абстракций устройства.


before_filter :auth_user

  def auth_user
    redirect_to new_user_registration_url unless user_signed_in?
  end

8 голосов
/ 13 декабря 2011

Вам нужно будет создать пользовательское FailureApp, которое наследует от Devise's FailureApp, как показано здесь: https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-when-the-user-can-not-be-authenticated

0 голосов
/ 12 августа 2018

Я добавил вики-страницу, показывающую правильный способ сделать это с помощью приложения с ошибками (как Стивен первоначально намекнул):

Ключ должен переопределить метод route, например:

# app/lib/my_failure_app.rb
class MyFailureApp < Devise::FailureApp
  def route(scope)
    :new_user_registration_url
  end
end

, а затем попросите Devise использовать ваше приложение для сбоя:

# config/initializers/devise.rb
config.warden do |manager|
  manager.failure_app = MyFailureApp
end

Этот подход предпочтительнее, чем переопределение authenticate_user! в вашем контроллере, потому что он не будет мешать многим "закулисным" вещам, которые делает Devise, таким как сохранение попытанного URL, чтобы пользователь мог быть перенаправлен после успешного входа.

с несколькими типами пользователей

Если у вас есть Admin и User Разрабатывайте ресурсы, вы, вероятно, захотите оставить по умолчанию функциональность «нового сеанса» для администраторов. Вы можете сделать это довольно легко, проверив, какой тип области обрабатывается:

# app/lib/my_failure_app.rb
class MyFailureApp < Devise::FailureApp
  def route(scope)
    scope.to_sym == :user ? :new_user_registration_url : super
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...