grant-profile
User profile middleware for Grant
Configuration
grant-profile accepts your Grant configuration
In addition to that a profile_url
key can be specified for any provider. This can be used for custom providers, or simply to override the profile_url
for existing one. Note that in some cases a custom logic might be needed for the internal HTTP client.
Not all of the supported providers in Grant are tested here, or have the correct profile URL set. Check out the configuration for current status.
Middlewares
For Express and Koa grant-profile needs to be mounted after Grant, and before any of the callback URLs defined in your Grant configuration.
Additionally a profile
key is attached to your session containing the user profile data.
Express
var express = require('express')
var session = require('express-session')
var grant = require('grant-express')
var profile = require('grant-profile').express()
var config = require('./config.json')
express()
.use(session({secret: 'grant', saveUninitialized: true, resave: true}))
.use(grant(config))
.use(profile(config))
.use('/hi', (req, res) => {
var {response, profile} = req.session.grant
res.end(JSON.stringify({response, profile}, null, 2))
})
.listen(3000)
Koa
var Koa = require('koa')
var session = require('koa-session')
var grant = require('grant-koa')
var profile = require('grant-profile').koa()
var config = require('./config.json')
var app = new Koa()
app.keys = ['grant']
app.use(session(app))
app.use(grant(config))
app.use(profile(config))
app.use((ctx, next) => {
if (ctx.path === '/hi') {
var {response, profile} = ctx.session.grant
ctx.body = JSON.stringify({response, profile}, null, 2)
}
})
app.listen(3000)
Hapi
var Hapi = require('hapi')
var yar = require('yar')
var grant = require('grant-hapi')
var profile = require('grant-profile').hapi()
var config = require('./config.json')
var server = new Hapi.Server({host: 'localhost', port: 3000})
server.route({method: 'GET', path: '/hi', handler: (req, res) => {
var {response, profile} = req.yar.get('grant')
return res.response(JSON.stringify({response, profile}, null, 2))
.header('content-type', 'text/plain')
}})
server.register([
{plugin: grant(), options: config},
{plugin: profile(), options: config},
{plugin: yar, options: {cookieOptions: {password: '01234567890123456789012345678912', isSecure: false}}},
])
.then(() => server.start())
Example
Used in the above examples.
{
"defaults": {
"protocol": "http",
"host": "localhost:3000",
"transport": "session",
"state": true,
"nonce": true,
"callback": "/hi"
},
"google": {"key": "..", "secret": "..", "scope": ["openid", "profile", "email"]},
"twitter": {"key": "..", "secret": ".."}
}