[英]how to authenticate the user with warden/devise without password?
[英]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 標頭行為。
您也可以反過來這樣做,識別Authorization
或Authentication
HTTP 標頭的存在。 除非您為當前請求設置了 JWT 或其他類型的 HTTP 身份驗證,否則不會出現這種情況。 這可以按如下方式完成:
request.headers['Authorization'].present? || request.headers['Authentication'].present?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.