Devise - запускать проверки после входа пользователя в систему, перенаправлять при ошибке - PullRequest
2 голосов
/ 19 августа 2011

Я работаю над приложением электронной коммерции.Когда пользователь входит в мое приложение, я хочу проверить мой внешний обработчик подписки и убедиться, что его подписка все еще активна и не истекла / не удалась / что угодно.

Я успешно выяснил, как использоватьЗащитите обратный вызов в моем initializers/devise.rb, чтобы выполнить проверку модели после входа в систему.Однако, если есть проблема, я хочу снова выйти из системы и перенаправить на определенную страницу, которая говорит им, что делать дальше.

Вот что у меня есть.Я знаю, что не могу использовать redirect_to от обратного вызова.Учитывая это, как лучше всего делать то, что я пытаюсь сделать?

Warden::Manager.after_authentication do |user, auth, opts|
  begin
    user.check_active_subscription # this works, and will raise one of several exceptions if something is goofy
  rescue
    redirect_to "/account/expired" # obviously this won't work, but see what I'm trying to do?
  end
end

1 Ответ

8 голосов
/ 19 августа 2011

Просто позвольте обратному вызову вызвать исключение и спасти его от вашего контроллера. E.g.:

Warden::Manager.after_authentication do |user, auth, opts|
  user.check_active_subscription
end

class SessionsController < ApplicationController
  def create
    # Authenticate
  rescue SubscriptionExpiredException
    # Logout
    redirect_to "/account/expired"
  end
end

Вы также можете использовать rescue_from в вашем ApplicationController, например:

class ApplicationController
  rescue_from SubscriptionExpiredException, :with => :deny_access

  def deny_access
    redirect_to "/account/expired"
  end
end
...