我第一次尝试使用passportjs对用户进行身份验证,但我一直无法让它工作。所以这是我正在使用的相关代码
Index.js路线文件
var express = require('express');
var router = express.Router();
var passport = require('passport');
var bcrypt = require('bcryptjs');
router.post('/', passport.authenticate('local', {
successRedirect: 'home',
failureRedirect: '/'
}));
app.js
// Authentication packages
var session = require('express-session');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var MySQLStore = require('express-mysql-session')(session);
var bcrypt = require('bcryptjs');
passport.use(new LocalStrategy(function(email, password, done) {
console.log(email);
console.log(password);
res.locals.connection.query('SELECT id, password FROM users WHERE email = ?', [email], function(err, user) {
console.log(user);
if (err) {return done(err)};
if (user.length === 0) {
done(null, false);
};
const hash = user[0].password.toString();
console.log(hash);
bcrypt.compare(password, hash, function(err, res) {
if (res === true) {
return done(null, {user_id: user[0].id});
} else {
return done(null, false);
}
});
});
}
));
当我输入有效的电子邮件地址和密码时,我不会像我想的那样被重定向到家中。相反,我被重定向回登录页面。当我使用无效的电子邮件地址时会发生同样的事情我也没有看到电子邮件和密码,即使我在提交登录表单时尝试登录它。
请有人帮帮我。
答案 0 :(得分:2)
我注意到您有email
作为用户名。我遇到了类似的问题,发现解决方案只是将usernameField
添加到策略选项中:
new LocalStrategy({usernameField: 'email'}, function(email, password, done){...})
答案 1 :(得分:0)
我认为您可能需要将passport.use
放在路径index.js文件中,或以某种方式将app.js中创建的passport
实例作为参数传递给index.js