Разработать с помощью Confirmable - перенаправить пользователя на пользовательскую страницу, когда пользователь пытается войти с неподтвержденным электронным письмом - PullRequest
17 голосов
/ 10 февраля 2012

При включенном модуле Confirmable Devise не позволит неподтвержденному пользователю войти в систему по истечении заданного периода времени.Вместо этого пользователь перенаправляется обратно на страницу входа с флэш-сообщением «Вы должны подтвердить свою учетную запись, прежде чем продолжить».

Это нежелательная модель взаимодействия, так как во флэш-уведомлении недостаточно места дляобъясните пользователю, почему в доступе было отказано, что означает «подтвердить вашу учетную запись», предоставьте ссылку для повторной отправки подтверждения, а также инструкции о том, как проверить папку со спамом и т. д.можно изменить это поведение, чтобы вместо этого перенаправить на определенный URL-адрес?

Ответы [ 3 ]

27 голосов
/ 10 февраля 2012

Извините, сначала я подумал, что вы имели в виду после регистрации, а не входа. Таким образом, ниже показано, как направить пользователей после регистрации, и что вам нужно сделать для входа, это создать собственный Devise :: FailureApp

См. Страницу вики: https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-when-the-user-can-not-be-authenticated

Затем в вашем пользовательском методе FailureApp перезаписать redirect_url метод из https://github.com/plataformatec/devise/blob/master/lib/devise/failure_app.rb:

  def redirect_url
    if warden_message == :unconfirmed
      custom_redirect_path
    else
      super
    end
  end

Для пользовательского перенаправления после регистрации:

В RegistrationsController есть метод контроллера after_inactive_sign_up_path_for, который вы можете перезаписать для достижения этой цели.

Сначала в ваших маршрутах вам нужно будет указать, использовать ли пользовательский контроллер:

config/routes.rb

  devise_for :users, :controllers => { :registrations => "users/registrations" }

Во-вторых, вы создаете свой собственный контроллер, который наследуется от обычного контроллера, чтобы перезаписать метод:

app/controllers/users/registrations_controller.rb

class Users::RegistrationsController < Devise::RegistrationsController

  protected

  def after_inactive_sign_up_path_for(resource)
    signed_up_path
  end

end

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

9 голосов
/ 17 октября 2013

Я только что сделал это, но выбрал другой подход.

в app / controllers / session_controller.rb:

class SessionsController < Devise::SessionsController

  before_filter :check_user_confirmation, only: :create

  #
  # other code here not relevant to the example
  #

private

  def check_user_confirmation
    user = User.find_by_email(params[:email])
    redirect_to new_confirmation_path(:user) unless user && user.confirmed?
  end
end

Это сработало для меня и казалось минимально инвазивным. В моем приложении новые сеансы всегда должны проходить через sessions#create, и пользователи всегда входят в систему со своим адресом электронной почты, поэтому это может быть проще, чем ваш.

Конечно, вы можете redirect_to в любом месте по вашему желанию в методе check_user_confirmation. new_confirmation_path был логичным выбором для меня, потому что он предоставляет пользователям ресурсы для подтверждения.

0 голосов
/ 11 августа 2017

Это мое решение, которое вам нужно добавить: неподтвержденное сообщение о локалях устройства ниже сессий.

в app / controllers / session_controller.rb

  def check_user_confirmation
    user = User.where(email: params[:user][:email]).take

    unless user && user.confirmed?
      set_flash_message! :alert, :unconfirmed
      expire_data_after_sign_in!
      respond_with user, location: after_inactive_sign_up_path_for(user)
    end
  end

  protected

  def after_inactive_sign_up_path_for(resource)
    new_user_session_path
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...