簡體   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