JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 7149
  • Score
    100M100P100Q122687F
  • License MIT

User profile middleware for Grant

Package Exports

  • grant-profile
  • grant-profile/lib/client

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (grant-profile) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

grant-profile

npm-version travis-ci coveralls-status

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') // or 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') // or 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') // or 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": ".."}
}