auth.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. var express = require('express');
  2. var createError = require('http-errors')
  3. const bcrypt = require('bcryptjs');
  4. const models = require('../../../models');
  5. const utils = require('../../../libs/utils');
  6. const authChecker = require('../../../libs/auth/checker');
  7. const auth = require('../../../libs/auth');
  8. const router = express.Router();
  9. router.get('/guard', authChecker.checkLogin, function (req, res, next) {
  10. (async function () {
  11. res.json({
  12. msg: 'ok'
  13. })
  14. })().catch(next)
  15. });
  16. router.get('/profile', authChecker.checkLogin, function (req, res, next) {
  17. (async function () {
  18. res.json(req.session.user);
  19. })().catch(next)
  20. });
  21. router.get('/sign-out', authChecker.checkLogin, function (req, res, next) {
  22. (async function () {
  23. //delete req.session.user;
  24. req.session.destroy();
  25. res.status(200)
  26. .clearCookie('test_sid', { path: '/' })
  27. .json({
  28. msg: 'ok'
  29. })
  30. })().catch(next)
  31. });
  32. router.post('/sign-in', function (req, res, next) {
  33. (async function () {
  34. let { username, password } = req.body;
  35. if (!username || !password) throw createError(401, 'Invalid params.');
  36. username = username.trim();
  37. password = password.trim();
  38. let doc = await models.User.findOne({ username });
  39. if (!doc) throw createError(401, '用户名或者密码错误');
  40. let match = await bcrypt.compare(password, doc.password);
  41. if (!match) throw createError(401, '用户名或者密码错误');
  42. if (doc.disabled) throw createError(401, '账户已停用,请联系管理员');
  43. doc.dateLastSignin = new Date();
  44. doc.ipLastSignin = req.ip;
  45. await doc.save();
  46. req.session.user = doc.toObject();
  47. res.json({
  48. msg: 'ok'
  49. })
  50. })().catch(next)
  51. });
  52. router.patch('/password', authChecker.checkLogin, function (req, res, next) {
  53. (async function () {
  54. let userId = req.session.user._id;
  55. let { password } = req.body;
  56. if (!password) throw createError(400, 'Invalid params.');
  57. let doc = await models.User.findById(userId);
  58. if (!doc) throw createError('系统错误');
  59. let salt = await bcrypt.genSalt(10);
  60. doc.password = await bcrypt.hash(password, salt);
  61. await doc.save();
  62. res.json({
  63. msg: 'ok'
  64. })
  65. })().catch(next)
  66. });
  67. router.get('/grants', authChecker.checkLogin, function (req, res, next) {
  68. (async function () {
  69. let doc = await models.User.findById(req.session.user._id).populate('roles');
  70. let grants = [];
  71. if (['chengen', 'guoziyun'].includes(doc.username)) {
  72. grants = auth.base.fullGrants();
  73. } else {
  74. doc.roles.forEach(role => {
  75. grants = grants.concat(role.grants);
  76. })
  77. }
  78. res.json(grants);
  79. })().catch(next)
  80. });
  81. router.post('/template', function (req, res, next) {
  82. (async function () {
  83. throw createError(404, 'YOUR SHOULD NOT SEE THIS');
  84. })().catch(next)
  85. });
  86. module.exports = router;