import Router from 'koa-router' import passport from 'koa-passport' import jwt from 'jsonwebtoken' import config from '../../config/config' const router = new Router({ prefix: '/auth' }) /** * @api {post} /auth Authenticate user * @apiVersion 1.0.0 * @apiName AuthUser * @apiGroup Auth * * @apiParam {String} username User username. * @apiParam {String} password User password. * * @apiExample Example usage: * curl -H "Content-Type: application/json" -X POST -d '{ "username": "johndoe@gmail.com", "password": "foo" }' localhost:5000/auth * * @apiSuccess {Object} user User object * @apiSuccess {ObjectId} user._id User id * @apiSuccess {String} user.name User name * @apiSuccess {String} user.username User username * @apiSuccess {String} token Encoded JWT * * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * "user": { * "_id": "56bd1da600a526986cf65c80" * "username": "foo" * "username": "johndoe" * }, * "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ" * } * * @apiError Unauthorized Incorrect credentials * * @apiErrorExample {json} Error-Response: * HTTP/1.1 401 Unauthorized * { * "status": 401, * "error": "Unauthorized" * } */ router.post('/', async (ctx, next) => passport.authenticate('local', (user) => { if (!user) { ctx.throw(401) } const token = jwt.sign({ id: user.id }, config.token) const response = user.toJSON() delete response.password delete response.salt ctx.body = { token, user: response } })(ctx, next) ) export default router