2012-04-11 175 views
21

我試圖通過我的node.js服務器訪問Google身份驗證API,但我無法找到如何。基本上,我希望用戶到達我的登錄頁面,點擊認證按鈕,然後服務器將他重定向到Google API,用戶允許我的應用訪問他的數據,然後Google API將用戶重定向到我的網站授權令牌。Google身份驗證與nodejs

我已經設置了oauth2所需的url,它似乎工作(如果我把它粘貼到我的網頁瀏覽器中,它會在google授權頁面上重定向我)。我看到this post似乎回答我的問題,但我不怎麼處理快速代碼部分。

這裏是我使用的代碼:

https.get(options, function(res) { 
    var retrieved_data = ''; 
    res.on('data', function(data) { retrieved_data += data; }); 
    res.on('end', function() { 
     // FIXME 
     client_response.writeHead(302, {"Content-Type" : "text/plain", "Location" : res.headers.location}); 
     client_response.end(retrieved_data);  
    }); 
}); 

但這種方法我的客戶端頁面(我的Ajax請求的錯誤引發領域)上返回一個錯誤。如果我在沒有「位置」信息的情況下將HTTP代碼更改爲200,則它會在客戶端上顯示一個「暫時移動」頁面,並帶有一個將我重定向到Google API授權頁面的按鈕。

有什麼建議嗎?

+3

使用https://github.com/google/google-api-nodejs-client。 – 2013-03-13 12:48:22

回答

9

我建議爲該任務使用現有的模塊。 everyauth是一個模塊,不僅允許oauth2訪問Google,還允許其他大多數提供該平臺的平臺。我在我的項目中使用它來訪問Twitter。它也有express集成。

你可以在The Node Toolbox尋找更多的替代品。想到護照,

8

我用Passport(與MS驗證方案無關!)已經有了很好的結果!我最初嘗試了everyauth,但IMO的護照更適合expressjs的慣例​​。

有一個谷歌身份驗證提供者就可以使用:http://passportjs.org/guide/google/

+0

請注意,'passport-google'模塊使用OpenID,Google不再支持此功能。請改用https://www.npmjs.com/package/passport-google-oauth2 – Luc 2016-02-23 21:38:47