passport.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. debug('setup LocalStrategy');
  21. const User = this.crowi.model('User');
  22. passport.use(new LocalStrategy(
  23. {
  24. usernameField: PassportService.USERNAME_FIELD,
  25. passwordField: PassportService.PASSWORD_FIELD,
  26. },
  27. (username, password, done) => {
  28. // find user
  29. User.findUserByUsernameOrEmail(username, password, (err, user) => {
  30. if (err) { return done(err); }
  31. // check existence and password
  32. if (!user || !user.isPasswordValid(password)) {
  33. return done(null, false, { message: 'Incorrect credentials.' });
  34. }
  35. return done(null, user);
  36. });
  37. }
  38. ));
  39. }
  40. /**
  41. * setup serializer and deserializer
  42. *
  43. * @memberof PassportService
  44. */
  45. setupSerializer() {
  46. debug('setup serializer and deserializer');
  47. const User = this.crowi.model('User');
  48. passport.serializeUser(function(user, done) {
  49. done(null, user.id);
  50. });
  51. passport.deserializeUser(function(id, done) {
  52. User.findById(id, function(err, user) {
  53. done(err, user);
  54. });
  55. });
  56. }
  57. }
  58. module.exports = PassportService;