簡體   English   中英

Omniauth:如何在運行時設置身份驗證提供程序詳細信息

[英]Omniauth: How to set authentication provider details at runtime

我有一個可從2個域訪問的rails應用程序。 Facebook要求我為每個域注冊一個Facebook應用程序,並為每個域提供憑據。 使用Omniauth,我只能指定在應用程序啟動時設置的一組憑據。 但是,我需要根據請求的主機為FB提供不同的憑據。

這里有兩個問題:

  1. 如何在運行時更改Facebook的Omniauth憑據?
  2. 如何攔截對facebook的呼叫,檢查域並相應地設置憑據? 由於Omniauth使用Rack Middleware,因此之前的過濾器不起作用。

任何建議都非常感謝!

復制評論中的答案,以便從“未答復”過濾器中刪除此問題:

我現在自己解決了這個問題 問題是fb策略第二次回調fb來獲取訪問令牌。 在第二次調用中,使用了錯誤的憑證(初始化程序中設置的憑據)。 所以我不得不修補OAuth2策略,以便再次調用rails應用程序,為第二次調用設置運行時憑據。 在回調中,通常只處理Omniauth的響應,我設置憑證並返回404,除非request.env [“omniauth.auth”]存在。 這很好,但對沒有動態提供商的應用程序有一些副作用。

現在的問題是,即使應用程序不想在運行時設置憑證,它也必須為回調添加一個條件,就像request.env [“omniauth.auth”]一樣,以避免在執行時執行回調代碼它被稱為第一次。 解決方案可能是向Omniauth構建器添加一個參數,如:dynamic_provider,如果已設置,則只調用應用程序。

〜每個Nico回答

暫無
暫無

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

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