Instantly share code, notes, and snippets.

Embed
What would you like to do?
Example tools for using querystring redirects with Feathers OAuth login.
'use strict';
const authentication = require('feathers-authentication');
const jwt = require('feathers-authentication-jwt');
const local = require('feathers-authentication-local');
const oauth2 = require('feathers-authentication-oauth2');
const GithubStrategy = require('passport-github');
// Bring in the oauth-handler
const makeHandler = require('./oauth-handler');
module.exports = function () {
const app = this;
const config = app.get('authentication');
// Create a handler by passing the `app` object.
const handler = makeHandler(app);
// Set up authentication with the secret
app.configure(authentication(config));
app.configure(jwt());
app.configure(local());
app.configure(oauth2(Object.assign({
name: 'github',
Strategy: GithubStrategy,
// Provide the handler to the GitHub auth setup.
// The successRedirect should point to the handle-oauth-login.html hosted on the web server.
handler: handler(config.github.successRedirect)
}, config.github)));
app.service('authentication').hooks({
before: {
create: [
authentication.hooks.authenticate(config.strategies)
],
remove: [
authentication.hooks.authenticate('jwt')
]
}
});
};
<!DOCTYPE html>
<html lang="en">
<head>
<title>Handle OAuth Login</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<script>
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split('&');
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split('=');
if (decodeURIComponent(pair[0]) == variable) {
return decodeURIComponent(pair[1]);
}
}
console.log('Query variable %s not found', variable);
}
var token = getQueryVariable('token');
if (token) {
window.localStorage.setItem('feathers-jwt', token);
}
window.location = '/';
</script>
</body>
</html>
module.exports = function (app) {
return function (url) {
const config = app.get('authentication');
const options = {
jwt: config.jwt,
secret: config.secret
};
return function (req, res, next) {
if (req.feathers && req.feathers.payload) {
app.passport.createJWT(req.feathers.payload, options).then(token => {
res.redirect(`${url}?token=${token}`);
})
.catch(error => {
next(error);
});
}
};
};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment