Vercel Serverless Function handler for Grant
var grant = require('grant').vercel({
config: {/*configuration - see below*/}, session: {secret: 'grant'}
})
module.exports = async (req, res) => {
var {response} = await grant(req, res)
if (response) {
res.statusCode = 200
res.setHeader('content-type', 'application/json')
res.end(JSON.stringify(response))
}
}
Also available for AWS, Azure, Google Cloud
The config
key expects your Grant configuration.
The following optional routing is used in all examples:
{
"rewrites": [
{"source": "/(.*)", "destination": "/api/grant"}
]
}
You need a .vercel
folder containing a project.json
file in every example:
{"orgId":"...","projectId":"..."}
You login by navigating to:
https://[PROJECT].vercel.app/connect/google
The redirect URL of your OAuth app have to be set to:
https://[PROJECT].vercel.app/connect/google/callback
And locally:
http://localhost:3000/connect/google
http://localhost:3000/connect/google/callback
The session
key expects your session configuration:
Option | Description |
---|---|
name |
Cookie name, defaults to grant |
secret |
Cookie secret, required |
cookie |
cookie options, defaults to {path: '/', httpOnly: true, secure: false, maxAge: null} |
store |
External session store implementation |
- The default cookie store is used unless you specify a
store
implementation! - Using the default cookie store may leak private data!
- Implementing an external session store is recommended for production deployments!
Example session store implementation using Firebase:
var request = require('request-compose').client
var path = process.env.FIREBASE_PATH
var auth = process.env.FIREBASE_AUTH
module.exports = {
get: async (sid) => {
var {body} = await request({
method: 'GET', url: `${path}/${sid}.json`, qs: {auth},
})
return body
},
set: async (sid, json) => {
await request({
method: 'PATCH', url: `${path}/${sid}.json`, qs: {auth}, json,
})
},
remove: async (sid) => {
await request({
method: 'DELETE', url: `${path}/${sid}.json`, qs: {auth},
})
},
}
The AWS Lambda handler for Grant accepts:
Argument | Type | Description |
---|---|---|
req |
required | The request object |
res |
required | The response object |
state |
optional | Dynamic State object {dynamic: {..Grant configuration..}} |
The AWS Lambda handler for Grant returns:
Parameter | Availability | Description |
---|---|---|
session |
Always | The session store instance, get , set and remove methods can be used to manage the Grant session |
redirect |
On redirect only | HTTP redirect controlled by Grant, it is set to true when Grant is going to handle the redirect internally |
response |
Based on transport | The response data, available for transport-state and transport-session only |
Example | Session | Callback λ |
---|---|---|
transport-state |
Cookie Store | ✕ |
transport-querystring |
Cookie Store | ✓ |
transport-session |
Firebase Session Store | ✓ |
dynamic-state |
Firebase Session Store | ✕ |
Different session store types were used for example purposes only.
All variables at the top of the Makefile
with value set to ...
have to be configured:
token
- Vercel Token
The transport-session and the dynamic-state examples requires your Firebase configuration to be set in vercel.json
:
{
"env": {
"FIREBASE_PATH": "...",
"FIREBASE_AUTH": "..."
}
}
firebase_path
- Firebase path of your database
https://[project].firebaseio.com/[prefix]
firebase_auth
- Firebase auth key of your database
{
"rules": {
".read": "auth == '[key]'",
".write": "auth == '[key]'"
}
}
All variables can be passed as arguments to make
as well:
make plan example=transport-querystring ...
# build example locally
make build-dev
# run example locally
make run-dev
# deploy Grant
make deploy