UNPKG

generator-sails-rest-api

Version:

Yeoman generator that provides already configured and optimized Sails REST API with bundle of predefined features

72 lines (60 loc) 1.76 kB
"use strict"; /** * AuthController * @description :: Server-side logic for manage users' authorization */ const _ = require('lodash'); const passport = require('passport'); module.exports = { /** * Sign in by email\password * @param req * @param res */ signin(req, res) { passport.authenticate('local', _.partial(sails.config.passport.onPassportAuth, req, res))(req, res); }, /** * Sign up by email\password * @param req * @param res */ signup(req, res) { const values = _.omit(req.allParams(), 'id'); User .create(values) .then(user => { return {token: CipherService.jwt.encodeSync({id: user.id}), user: user} }) .then(res.created) .catch(res.negotiate); }, /** * Authorization via social networks * @param req * @param res */ social(req, res) { const type = req.param('type') ? req.param('type').toLowerCase() : '-'; const strategyName = [type, 'token'].join('-'); if (Object.keys(passport._strategies).indexOf(strategyName) === -1) { return res.badRequest(null, {message: [type, ' is not supported'].join('')}); } passport.authenticate('jwt', (error, user, info) => { req.user = user; passport.authenticate(strategyName, _.partial(sails.config.passport.onPassportAuth, req, res))(req, res); })(req, res); }, /** * Accept JSON Web Token and updates with new one * @param req * @param res */ refresh_token(req, res) { if (!req.param('token')) return res.badRequest(null, {message: 'You must provide token parameter'}); const oldDecoded = CipherService.jwt.decodeSync(req.param('token')); res.ok({ token: CipherService.jwt.encodeSync({id: oldDecoded.id}) }); } };