簡體   English   中英

如何確定使用哪種設計/管理員策略來驗證/登錄用戶?

[英]How do I determine which Devise/Warden strategy was used to authenticate/log in the user?

假設我對 Warden 有兩個默認策略, :database_authenticatable:jwt

我如何確定(在控制器內部)登錄current_user時使用了哪種策略?

您可以使用env['warden'].winning_strategy獲取上次運行策略的標簽。 這意味着該策略已運行,但其結果可能是:failure:success甚至:custom 您應該檢查env['warden'].result == :success以確保策略成功運行。

AFAIK 沒有直接執行此操作的實現。 您可以覆蓋這些策略行為以注入某種會話參數來識別哪個是哪個,或者您可以使用 JWT Headers 必要條件來識別它被用於給定請求。 如果您在默認設置中使用默認database_authenticable ,它將用於您的一般 WEB 導航,它利用瀏覽器會話。 您可以利用它來識別您的用戶,因為通過 API cookie/會話消費時通常不存在。 看看你可以用Rails 的會話做什么,並用它來識別你用戶的瀏覽器,它可能是這樣的:

session[:user_id] = @current_user.id
User.find(session[:user_id])

那么你可以使用session[:user_id].present? 檢查會話是否正在給定上下文中使用,不包括 JWT HTTP 標頭行為。

您也可以反過來這樣做,識別AuthorizationAuthentication HTTP 標頭的存在。 除非您為當前請求設置了 JWT 或其他類型的 HTTP 身份驗證,否則不會出現這種情況。 這可以按如下方式完成:

request.headers['Authorization'].present? || request.headers['Authentication'].present?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM