Devise + Subdomain - Перенаправить пользователя для входа - PullRequest
7 голосов
/ 20 декабря 2011

Я использую devise gem в приложении rails с несколькими поддоменами.Каждый поддомен обрабатывается соответствующим контроллером, который выглядит следующим образом:

class Subdomain1Controller < ApplicationController
  before_filter :authenticate_user!
  def index
  end
end

При реализации вышеупомянутого контроллера Devise всегда сохраняет поддомен при перенаправлении пользователя на страницу входа.В приведенном выше случае Devise перенаправляет пользователя на http://subdomain1.acmesite/users/sign_in вместо общего URL-адреса sign_in.

Это приводит к наличию нескольких URL-адресов sign_in для каждого субдомена.

http://subdomain1.acmesite/users/sign_in
http://subdomain2.acmesite/users/sign_in
http://subdomain3.acmesite/users/sign_in

IМне интересно, возможно ли переопределить метод devise, чтобы исключить субдоменовую часть из URL-адреса и при этом сохранить информацию URL-адреса предыдущей страницы.Более того, я хочу, чтобы Devise перенаправил пользователя на определенный URL-адрес (например: http://acmesite/users/sign_in) независимо от субдомена, и после успешной аутентификации Devise должен вернуть пользователя обратно на субдомен вызывающего абонента + страницу.

Ответы [ 2 ]

2 голосов
/ 26 октября 2012

Вам необходимо написать собственное приложение FailureApp, которое активируется, когда пользователь не прошел проверку подлинности.

С Как: Перенаправить на определенную страницу, когда пользователь не может быть аутентифицирован

class CustomFailure < Devise::FailureApp
  def redirect_url
    #return super unless [:worker, :employer, :user].include?(scope) #make it specific to a scope
     new_user_session_url(:subdomain => 'secure')
  end

  # You need to override respond to eliminate recall
  def respond
    if http_auth?
      http_auth
    else
      redirect
    end
  end
end

И добавьте следующее в config / initializers / devise.rb:

config.warden do |manager|
  manager.failure_app = CustomFailure
end

Если вы получаете неинициализированную постоянную ошибку CustomFailure и поместили класс CustomFailure в каталог / lib, обязательно загрузите ваши файлы lib в файле application.rb, как показано ниже

config.autoload_paths += %W(#{config.root}/lib)
0 голосов
/ 03 июля 2012

Я удалил самоцвет Devise из своего проекта и теперь вместо него использую Волшебство.

Волшебство предоставляет мне полный контроль над контроллером и просмотр, полностью соответствует требованиям моего проекта. После шести месяцев работы над производством я доволен драгоценностью Волшебства.

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