[英]Devise - single sign in form for multiple users
我有兩個Devise模型,User和Business; 我希望兩者都能夠使用單一登錄形式登錄。 我正在使用骨干js,我有一個自定義的視圖,所以視圖不是一個問題。 ajax請求用於登錄,它按預期適用於用戶,但不適用於企業。
我搜索過谷歌,並提到了一些提到使用STI來解決這個問題的解決方案,但是項目已經完成,我現在無法做出這樣的改變。 我正在考慮重寫Devise會話控制器和:
我無法弄清楚如何更改代碼來實現上述目標,我不知道warden如何工作以及我需要調整哪些params來實現上述功能,需要調用哪些函數。 任何人都可以指出我正確的方向或提供一個例子,說明我應該如何向前推進。
謝謝。
別擔心,你不會被卡住。
我認為你最好的選擇是覆蓋Devise的會話控制器並改變會話的'new'和'create'方法。
所以在你自己的“sessions_controller.rb”中,你會有這樣的東西:
class SessionsController < Devise::SessionsController
# GET /resource/sign_in
def new
resource = build_resource(nil, :unsafe => true)
clean_up_passwords(resource)
respond_with(resource, serialize_options(resource))
end
# POST /resource/sign_in
def create
resource = warden.authenticate!(auth_options)
set_flash_message(:notice, :signed_in) if is_navigational_format?
sign_in(resource_name, resource)
respond_with resource, :location => after_sign_in_path_for(resource)
end
end
在你的路線中,你會使用類似的東西(取決於你命名的用戶模型):
devise_for :users, :controllers => {
:sessions => 'sessions'
}
devise_for :businesses, :controllers => {
:sessions => 'sessions'
}
以上會話控制器根本不是自定義的。 我不知道你的代碼,所以我無法真正幫助那里。 但基本步驟是:
auth_options
和resource_name
變量以了解它們如何存儲數據。 resource
添加條件邏輯以更改這些變量。 設計是偉大的,角色很棒,但有時擁有一個用戶模型,甚至使用STI,沒有意義。 我很快就在這個問題上寫了一篇更長的帖子,因為我在最近的一個項目中處理了這個問題。
我最近提出了這個完全黑客來完成這項工作。 我的建議是強烈考慮具有角色的單個用戶模型,但這是有效的 - 至少對於當前版本的Devise。
https://gist.github.com/jeremyw/5319386
如果你monkeypatch或以其他方式覆蓋這樣的默認行為,請確保你有一個好的測試套件,以防你想要嘗試升級Devise。
請考慮僅使用User模型並使用CanCan和Rolify來滿足每種類型用戶的獨特需求。 這可能意味着從一些代碼開始,但從長遠來看可能更容易維護。
不要只聽我的話。 這是一個有良好反應的相關問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.