2014-09-30 75 views
1

我正在構建一個網絡應用程序,它將使用標準用戶名/密碼對對用戶進行身份驗證,但還需要授權訪問Dropbox和/或Google Drive來執行一些後臺文件處理。我想用friend-oauth2,但我不知道如何爲不同的網址使用不同的friend工作流程。針對不同網址的不同朋友工作流程

我想什麼有是:

  1. /users/*保護與workflows/interactive-form
  2. /dropbox/*/gdrive/*oauth2/workflow
  3. 任何其他URL的公共保護

我知道該怎麼做點1和3(與friend/authenticatefriend/authorize),但我不知道如何獲得#2。請幫忙。

回答

2

你需要用不同的中間件定義分開包裝你的路由。下面是使用用於路由定義的Compojure一個例子:

(defroutes interactive-routes* 
    ; Put your interactive routes here 
    ; ... 
) 
(defroutes oauth-routes* 
    ; Put your oauth routes here 
    ; ... 
) 

(def interactive-routes 
    (-> #'interactive-routes* 
    (friend/authenticate {:credential-fn (partial creds/bcrypt-credential-fn users) 
          :workflows [(workflows/interactive-form)]}) 
)) 
(def oauth-routes 
    (-> #'oauth-routes* 
    (friend/authenticate {:credential-fn (partial creds/bcrypt-credential-fn users) 
          :workflows [(oauth2/workflow)]}) 
)) 

(defroutes all-routes 
    (ANY "*" [] interactive-routes) 
    (ANY "*" [] oauth-routes) 

; Then do what you normally would with `all-routes` (e.g., wrap with more middleware, pass to ring server) 

(感謝this answer用於在不同中間件不同的路由的音符)