Passport strategy for authenticating with Google AccessToken using the OAuth 2.0 API.
npm install passport-google-token2Google AccessToken
access_token` in your Node.js applications.
By plugging into Passport, Google authentication can be easily and
unobtrusively integrated into any application or framework that supports
Connect-style middleware, including
Express.

Recommended
$3
$3
Why i use passport-google-token2 ?
Because passport-google-token is Archived. It's don't maintained anymore.
Install
`bash
$ npm install passport-google-token2
`
Usage
$3
#### Default options
`javascript
{
session: false
}
`
Note: GoogleTokenStrategy 'options' are optional so just pass {}
`javascript
const GoogleTokenStrategy = require('passport-google-token2');
passport.use(new GoogleTokenStrategy({},
async (accessToken, refreshToken, profile, done) => {
try {
const user = await User.findOne({ google_id: profile.id });
if (user !== null) {
done(null, user);
} else {
const newUser = await User.create({ ...profile._json, google_id: profile.id });
done(null, newUser);
}
} catch (error) {
done(error);
}
}
));
`
#### Authenticate Requests
Use passport.authenticate(), specifying the 'google-access-token' strategy, to
authenticate requests.
For example, as route middleware in an Express
application:
`javascript
app.get('/auth/google/token', passport.authenticate('google-access-token'), (req, res) => {
// TODO:: Do something with user
res.send(req.user? 200 : 401);
});
`
$3
`javascript
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// TODO:: use "err.oauthError"
console.log(err.oauthError);
// render the error page
res.status(err.status || err.oauthError.statusCode || 500);
res.render('error');
});
`
$3
Clients can send requests to routes that use google-access-token authentication using query params, body, or HTTP headers.
Clients will need to transmit the access_token and optionally the refresh_token that are received from google after login.
$3
`shell
GET /auth/google/token?access_token=
`
$3
Clients can choose to send the access token http-header.
`shell
GET /resource HTTP/1.1
Host: server.example.com
access_token:
`
$3
Clients can choose to send the access token using the Content-Type: application/json format.
Note: When you send access_token via HTTP body your server must need a body-parser.
`shell
POST /resource HTTP/1.1
Host: server.example.com
access_token=
``