Introduction to ghauth
ghauth
is a versatile library designed to simplify authentication with GitHub’s API. It provides an easy-to-use interface for handling authentication flows, offering a comprehensive suite of APIs. In this guide, we will delve into some of the most useful APIs that ghauth
provides, along with code snippets to demonstrate their usage. We will also develop a sample app using these APIs.
Getting Started
To begin, install ghauth
via npm:
npm install ghauth
API Examples
Initialize Authentication
Initialize ghauth
with client credentials:
const ghauth = require('ghauth');
const authOptions = {
configName: 'myApp',
scopes: ['user', 'repo', 'gist']
};
ghauth(authOptions, (err, authData) => {
if (err) throw err;
console.log(authData);
});
Get Access Token
Retrieve an access token for authenticated requests:
ghauth(authOptions, (err, authData) => {
if (err) throw err;
console.log(authData.token);
});
List User Repositories
List repositories of the authenticated user:
const fetch = require('node-fetch');
ghauth(authOptions, (err, authData) => {
if (err) throw err;
fetch('https://api.github.com/user/repos', {
headers: { 'Authorization': 'token ' + authData.token }
})
.then(res => res.json())
.then(data => console.log(data));
});
Create a Gist
Create a new gist with ghauth
:
ghauth(authOptions, (err, authData) => {
if (err) throw err;
fetch('https://api.github.com/gists', {
method: 'POST',
headers: {
'Authorization': 'token ' + authData.token,
'Content-Type': 'application/json'
},
body: JSON.stringify({
description: 'A test gist',
public: true,
files: {
'test.txt': {
content: 'Hello World'
}
}
})
})
.then(res => res.json())
.then(data => console.log(data));
});
Building a Sample App
Let’s build a simple Node.js application that authenticates with GitHub and performs some basic operations using the above-mentioned APIs.
const express = require('express');
const ghauth = require('ghauth');
const fetch = require('node-fetch');
const app = express();
const PORT = 3000;
app.get('/auth', (req, res) => {
ghauth(authOptions, (err, authData) => {
if (err) res.status(500).send(err.message);
res.send(`Authenticated as ${authData.user}`);
});
});
app.get('/repos', (req, res) => {
ghauth(authOptions, (err, authData) => {
if (err) res.status(500).send(err.message);
fetch('https://api.github.com/user/repos', {
headers: { 'Authorization': 'token ' + authData.token }
})
.then(res => res.json())
.then(data => res.json(data));
});
});
app.get('/create-gist', (req, res) => {
ghauth(authOptions, (err, authData) => {
if (err) res.status(500).send(err.message);
fetch('https://api.github.com/gists', {
method: 'POST',
headers: {
'Authorization': 'token ' + authData.token,
'Content-Type': 'application/json'
},
body: JSON.stringify({
description: 'A gist created via API',
public: true,
files: {
'example.txt': {
content: 'This is an example'
}
}
})
})
.then(res => res.json())
.then(data => res.json(data));
});
});
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
Hash: 2e368fcc430c5f3aa60c7f8761c2837cd48f1263288bb24a15152e5081cd6f06