2016-11-09 120 views
0

我想創建一個登錄使用設計與我已計算的用戶名。作爲一個例子,我們假設我們想命名空間我們的用戶名 - 我想從登錄表單接收一個用戶名,並使用namespaced_username來進行實際的身份驗證。設計與計算/操作的用戶名參數登錄

所以在我User::SessionsController#create,我可能有:

def create 
    params[:user][:namespaced_username] = "namespace/#{params[:user][:mobile_number]}" 
    super 
end 

即使遺贈是監聽namespaced_username(配置有兩種初始化或模型本身authentication_keys),並與用戶設置爲namespace/username,我還是被告知Invalid Namespaced username or password is not valid

我該如何獲得設計(特別是監獄戰略)來閱讀新參數?

回答

0

原來這是一個Rails 5問題。基本上,Warden(由devise使用)傳遞請求對象,可能在中間件中,然後交給控制器一個請求的params散列副本。

最簡單的方式來解決它,內User::SessionsController#create,我們需要添加一行:

def create 
    # Here we change params - but this won't be seen by the warden strategy 
    params[:user][:namespaced_username] = = "namespace/#{params[:user][:mobile_number]}" 
    # Inject our changes into the copy in request 
    request.params[:user].merge!(params[:user]) 
    # now our changes will be seen by warden - continue with devise: 
    super 
end