[英]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.