passport.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. const debug = require('debug')('crowi:service:PassportService');
  2. const passport = require('passport');
  3. const LocalStrategy = require('passport-local').Strategy;
  4. /**
  5. * the service class of Passport
  6. */
  7. class PassportService {
  8. // see '/lib/form/login.js'
  9. static get USERNAME_FIELD() { return 'loginForm[username]' }
  10. static get PASSWORD_FIELD() { return 'loginForm[password]' }
  11. constructor(crowi) {
  12. this.crowi = crowi;
  13. }
  14. /**
  15. * setup LocalStrategy
  16. *
  17. * @memberof PassportService
  18. */
  19. setupLocalStrategy() {
  20. const User = this.crowi.model('User');
  21. passport.use(new LocalStrategy(
  22. {
  23. usernameField: PassportService.USERNAME_FIELD,
  24. passwordField: PassportService.PASSWORD_FIELD,
  25. },
  26. (username, password, done) => {
  27. // find user
  28. User.findUserByUsernameOrEmail(username, password, (err, user) => {
  29. if (err) { return done(err); }
  30. // check existence and password
  31. if (!user || !user.isPasswordValid(password)) {
  32. return done(null, false, { message: 'Incorrect credentials.' });
  33. }
  34. return done(null, user);
  35. });
  36. }
  37. ));
  38. }
  39. /**
  40. * setup serializer and deserializer
  41. *
  42. * @memberof PassportService
  43. */
  44. setupSerializer() {
  45. const User = this.crowi.model('User');
  46. passport.serializeUser(function(user, done) {
  47. done(null, user.id);
  48. });
  49. passport.deserializeUser(function(id, done) {
  50. User.findById(id, function(err, user) {
  51. done(err, user);
  52. });
  53. });
  54. }
  55. }
  56. module.exports = PassportService;