Simple OAuth2 Github
This library is a wrapper around Simple OAuth2 Library
Specially made for Authorization Code Flow with GitHub.
Requirements
Latest Node 8 LTS or newer versions.
Getting started
npm install --save simple-oauth2 simple-oauth2-github
or
yarn add simple-oauth2 simple-oauth2-github
Usage
const simpleOAuth2Github = require('simple-oauth2-github');
const github = simpleOAuth2Github.create(options);
github object exposes 3 keys:
- authorize: Middleware to request user's authorization.
- getToken: Middleware for callback processing and exchange the authorization token for an
access_token
- oauth2: The underlying simple-oauth2 instance.
Options
SimpleOAuth2Github comes with default values for most of the options.
Required options
| clientId | Your App Id. |
| clientSecret | Your App Secret Id. |
| callbackURL | Callback configured when you created the app. |
Other options
Example
Original boilerplate
const oauth2 = require('simple-oauth2').create({
client: {
id: process.env.GITHUB_CLIENT_ID,
secret: process.env.GITHUB_CLIENT_SECRET
},
auth: {
authorizeHost: 'https://github.com',
authorizePath: '/login/oauth/authorize',
tokenHost: 'https://github.com',
tokenPath: '/login/oauth/access_token'
}
});
router.get('/auth/github', (req, res) => {
const authorizationUri = oauth2.authorizationCode.authorizeURL({
redirect_uri: 'http://localhost:3000/auth/github/callback',
scope: ['read:user', 'read:email']
});
res.redirect(authorizationUri);
});
router.get('/auth/github/callback', async(req, res) => {
const code = req.query.code;
const options = {
code,
redirect_uri: 'http://localhost:3000/auth/github/callback'
};
try {
const result = await oauth2.authorizationCode.getToken(options);
const token = oauth2.accessToken.create(result);
return res.status(200).json(token);
} catch (error) {
console.error('Access Token Error', error.message);
return res.status(500).json('Authentication failed');
}
});
With SimpleOAuth2Github
const simpleOAuth2Github = require('simple-oauth2-github');
const github = simpleOAuth2Github.create({
clientId: process.env.GITHUB_CLIENT_ID,
clientSecret: process.env.GITHUB_CLIENT_SECRET,
callbackURL: 'http://localhost:3000/auth/github/callback'
});
router.get('/auth/github', github.authorize);
router.get('/auth/github/callback', github.accessToken, (req, res) => {
return res.status(200).json(req.token);
});