【发布时间】:2023-03-19 19:26:01
【问题描述】:
我正在尝试使用护照 js 实现本地身份验证并在 express 中进行均衡。我遇到的问题是成功回调永远不会在成功的身份验证时触发。日志显示找到了用户,但用户对象从未记录在请求回调中,也没有触发 res.send。
路线和策略
passport.use(
'local',
new LocalStrategy(
{
usernameField: 'email',
passwordField: 'password',
passReqToCallback: true,
},
(req, email, password, done) => {
// find user
User.findOne({ where: { email } }).then(user => {
if (!user) {
return done(null, false);
}
if (password !== user.password) {
return done(null, false);
}
console.log('user found!');
return done(null, user);
});
},
),
);
app.use(passport.initialize());
// routes
app.post(
'/login',
passport.authenticate('local'),
(req, res) => {
console.log(req.user);
res.send('logged in');
// const expiresIn = 60 * 60 * 24 * 180; // 180 days
// const token = jwt.sign(req.user, config.auth.jwt.secret, { expiresIn });
// res.cookie('id_token', token, { maxAge: 1000 * expiresIn, httpOnly: true });
},
);
应用日志
express:router:layer new '/' +0ms
express:router:route new '/login' +1ms
express:router:layer new '/login' +0ms
express:router:route post '/login' +0ms
express:router:layer new '/' +0ms
express:router:route post '/login' +0ms
express:router:layer new '/' +0ms
express:router:route new '/users' +0ms
express:router:layer new '/users' +0ms
express:router:route get '/users' +0ms
express:router:layer new '/' +0ms
express:router:route new '/signup' +0ms
express:router:layer new '/signup' +1ms
express:router:route post '/signup' +0ms
express:router:layer new '/' +0ms
express:router use '/' <anonymous> +0ms
express:router:layer new '/' +0ms
express:router use '/' <anonymous> +0ms
express:router:layer new '/' +0ms
express:router use '/' <anonymous> +0ms
express:router:layer new '/' +0ms
express:application set "port" to '3001' +0ms
Executing (default): SELECT 1+1 AS result
Connection has been established successfully.
express:router dispatching POST /login +4s
express:router query : /login +2ms
express:router expressInit : /login +0ms
express:router favicon : /login +2ms
express:router logger : /login +0ms
express:router jsonParser : /login +2ms
express:router urlencodedParser : /login +28ms
express:router cookieParser : /login +0ms
express:router serveStatic : /login +1ms
express:router initialize : /login +0ms
Executing (default): SELECT "id", "firstName", "lastName", "username", "email", "password", "createdAt", "updatedAt" FROM "users" AS "user" WHERE "user"."email" = 'a' LIMIT 1;
user found!
express:router <anonymous> : /login +25ms
express:router <anonymous> : /login +1ms
express:view require "jade" +0ms
express:view lookup "error.jade" +190ms
express:view stat "/home/zmigaddo/sc/views/error.jade" +0ms
express:view render "/home/zmigaddo/sc/views/error.jade" +1ms
POST /login 500 346.104 ms - 1910
【问题讨论】:
-
我没有看到任何LocalStrategy接收req作为参数的例子,总是只有3个参数,像这样:(用户名,密码,完成)试着像这个网站的例子那样做:passportjs.org/docs/username-password
-
DavidVicente 是的,我也尝试删除 req 参数,但没有效果。
标签: express sequelize.js passport.js