weave-auth
Version:
80 lines (73 loc) • 2.22 kB
JavaScript
const { promisify } = require('fachwork')
module.exports = {
name: 'auth',
settings: {
tokenSecret: null,
refreshTokenSecret: null
},
actions: {
authenticate: {
params: {
credentials: { type: 'any' }
},
handler (context) {
return this.adapter.authenticate(context.params.credentials)
.then(this.authentication)
}
},
verify: {
params: {
token: { type: 'string' }
},
handler (context) {
return this.verify(context, context.params.token)
}
},
},
methods: {
refreshTokens (payload) {
const createAccessToken = jwt.sign(
payload,
this.settings.tokenSecret,
{
expiresIn: this.settings.tokenExpiresIn
}
)
const createRefreshToken = jwt.sign(
payload,
this.settings.refreshTokenSecret,
{
expiresIn: this.settings.refreshTokenExpiresIn
}
)
return Promise.all([createAccessToken, createRefreshToken])
},
verify(context, token) {
const self = this
return new Promise((resolve, reject) => {
try {
const payload = jwt.verify(token, self.settings.tokenSecret)
return resolve(payload)
} catch (error) {
return reject(error)
}
})
}
},
created () {
if (this.schema.authAdapter) {
this.adapter = this.schema.authAdapter
this.adapter.init(this)
} else {
throw new Error('Auth adapter not defined.')
}
if (!this.schema.authenticate) {
throw new Error('Authenticate method have to be implemented.')
}
},
started () {
if (!this.adapter) {
return Promise.reject('You have to specify an Authentication adapter: authAdapter is missing!')
}
}
}