2015-10-18 52 views
1

我正在按照說明here(獨立帳戶)設置條帶連接。我處理授權和檢索節點服務器上的access_token將參數傳遞給服務器(條帶連接中的oAuth回調)

用戶可以訪問鏈接MY_SERVER_URI/authorize和將被重定向到一個預先定義的條紋AUTHORIZE_URI

app.get("/authorize", function(req, res) { 
    // Redirect to Stripe /oauth/authorize endpoint 
    res.redirect(AUTHORIZE_URI + "?" + qs.stringify({ 
    response_type: "code", 
    scope: "read_write", 
    client_id: CLIENT_ID 
    })); 
}); 

用戶後授權條紋連接,他或她將被重定向到一個預先定義的REDIRECT_URI,在這種情況下等於MY_SERVER_URI/oauth/callback,其中執行下面的腳本:

app.get("/oauth/callback", function(req, res) { 

    var code = req.query.code; 

    // Make /oauth/token endpoint POST request 
    request.post({ 
    url: TOKEN_URI, 
    form: { 
     grant_type: "authorization_code", 
     client_id: CLIENT_ID, 
     code: code, 
     client_secret: API_KEY 
    } 
    }, function(err, r, body) { 

    var accessToken = JSON.parse(body).access_token; 

    // Do something with your accessToken 

    // For demo"s sake, output in response: 
    res.send({ "Your Token": accessToken }); 

    }); 
}); 

現在這裏的一切工作正常,應用程序能夠得到accessToken。但是,此accessToken需要保存並與授予客戶端訪問權限的用戶匹配。

因此我的問題歸結爲,我怎樣才能既在oauth/callbackGET請求傳遞一個客戶端的參數(如客戶端用戶id),或處理服務器處理在客戶端(例如,$httpGET請求而不是訪問uri)?我想後面不是推薦的選項。

我做了兩個嘗試:

  • 我試圖使用動態REDIRECT_URI傳遞參數,但 問題是,條紋需要全部網址需要指定 第一個(導致沒有參數可以是通過重定向 url)。
  • 我試着用$httpGET請求訪問MY_STRIPE_URI/authorize,但是這給了我明顯的錯誤否「訪問控制允許來源」標頭出現在所請求的資源

有什麼可以做了什麼?

回答

1

一般來說你的情況如下:

  1. 也求你服務器上的一些路線和存儲用戶的ID有:req.session.user = {id: '...'}
  2. 從該路線將用戶重定向到第三方授權URL
  3. 在您收到訪問令牌的路線,它存儲在會話,以及:訪問令牌,隨後請求到條紋的API req.session.user.access_token = '...'
  4. 使用

注:

  1. 不要試圖破解authorization_code的OAuth流
  2. 您可能會發現Grant更容易地使用這種類型的OAuth流,Stripe支持
  3. 相關comment
+0

聽起來很有希望。但是,我得到的錯誤:TypeError:無法設置屬性'用戶'未定義(沒有req.session ??) – JohnAndrews

+1

那麼,你需要安裝默認[會話中間件](https://www.npmjs.com /包/快速會議)或類似的第一。 – simo

8

您必須將您的用戶標識作爲「狀態」參數傳遞,Stripe將在回調中將其返回。我發現避免會話的唯一方法

+3

我不會將用戶標識作爲「狀態」傳遞,而是爲用戶提供某種標識標記。否則,當我重定向創建我的條紋帳戶我可以通過https://connect.stripe.com/oauth替換網址https://connect.stripe.com/oauth/authorize?response_type=code&scope=read_write&client_id=xyz123&state=1/authorize?response_type = code&scope = read_write&client_id = xyz123&state = 2並且我的令牌將被註冊到用戶2而不是用戶1 – Maxime