Mặc định Passport.js chỉ hỗ trợ xác thực bằng 1 định danh hoặc là Email, hoặc là UserName. Người dùng không thể tùy thích lựa chọn.

passport.js

Khi thiết lập chiến lược xác thực LocalStrategy bạn cần viết lại câu điều kiện truy vấn tài khoản người dùng theo Username hoặc Email.

Bạn có thể đọc thêm về hướng dẫn tích hợp xác thực passport.js trong ứng dụng Sails.js tại đây:

Một chương trình Node.js với nội dung file passport.js được thiết lập như sau:

var passport = require('passport')
  , LocalStrategy = require('passport-local').Strategy
  , bcrypt = require('bcryptjs')
  ;

passport.serializeUser(function (user, done) {
  done(null, user.id);
});

passport.deserializeUser(function (id, done) {
  User.findOne({id: id}, function (err, user) {
    done(err, user);
  });
});

passport.use(new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password'
  },
  function (email, password, done) {
    var query = {
      or: [{
        username: email
      }, {
        email: email
      }]
    };

    User.findOne(query, function (err, user) {
      if (err) {
        return done(err);
      }
      if (!user) {
        return done(null, false, {message: 'Incorrect info.'});
      }

      bcrypt.compare(password, user.password, function (err, res) {
        if (!res)
          return done(null, false, {
            message: 'Invalid Password'
          });
        var returnUser = {
          email: user.email,
          createdAt: user.createdAt,
          id: user.id
        };
        return done(null, returnUser, {
          message: 'Logged In Successfully'
        });
      });
    });
  }
));

Qua cấu hình cài đặt trên, người dùng có thể tùy ý đăng nhập vào hệ thống bằng email hoặc username của mình. Hi vọng ứng dụng của bạn sẽ đem lại những thoải mái và giá trị cho người sử dụng !

About The Author