Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google authentication with nodejs

I'm trying to reach Google authentication API with my node.js server but I just can't find how. Basically, I want the user to arrive on my login page, click on the authentication button, then the server redirects him to the Google API, the user allows my app to access his data and then the Google API redirects the user to my site with the authorization token.

I've set up the url required by oauth2 and it seems to work (if I paste it in my web browser, it redirects me on google authorization page). I saw this post which seemed to answer my question but I don't how to handle the express code part.

Here is the code I'm using :

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);    
    });
});

But this method returns an error on my client page (raised by the error field of my ajax request). If I change the HTTP code to 200 without the "Location" information, it displays on the client a "Moved Temporarily" page with a button which redirects me to Google API authorization page.

Any suggestion ?

like image 884
Simon Avatar asked Apr 11 '12 03:04

Simon


3 Answers

I would suggest to use existing modules for that task. everyauth is a module that allows not only oauth2 access to Google, but to most other platform that offer it as well. I am using this for twitter access on my projects. It has express integration as well.

You can look for more alternatives at The Node Toolbox. Passport comes to mind.

like image 122
arvidkahl Avatar answered Nov 20 '22 06:11

arvidkahl


As stated by Burcu Dogan, Google has released an official client library for accessing Google APIs. It can be found here : https://github.com/google/google-api-nodejs-client/

like image 9
Simon Avatar answered Nov 20 '22 05:11

Simon


I've had good results with Passport (not related to the MS authentication scheme!). I initially tried everyauth, but IMO passport fits better with expressjs conventions.

There's a Google auth provider ready to use: http://passportjs.org/guide/google/

like image 8
UpTheCreek Avatar answered Nov 20 '22 06:11

UpTheCreek