繁体   English   中英

设计+子域 - 重定向用户sign_in

[英]Devise + Subdomain - Redirect user for sign_in

我在具有多个子域的rails应用程序中使用devise gem。 每个子域由相应的控制器处理,如下所示:

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

通过上述控制器实现,Devise始终保持子域,同时将用户重定向到登录页面。 在上述情况下,Devise将用户重定向到http://subdomain1.acmesite/users/sign_in而不是常用的sign_in Url。

这导致每个子域具有多个sign_in URL。

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

我想知道是否可以覆盖设计方法从网址中排除子域部分,但保留上一页的网址信息。 更珍贵的是,我希望Devise将用户重定向到特定的Url(例如: http:// acmesite / users / sign_in ),无论子域名如何,并且在成功进行身份验证后,Devise应该将用户返回给调用者子域+页面。

您需要编写一个自定义的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目录下,请确保在application.rb文件中自动加载您的lib文件,如下所示

config.autoload_paths += %W(#{config.root}/lib)

我从我的项目中删除了Devise gem,现在使用了Sorcery。

巫术为我提供了对控制器和视图的完全控制,完全符合我的项目要求。 在这次过渡后,我有六个月的生产时间,我对Sorcery宝石很满意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM