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