如何解决 authjs 上的用户未定义错误
Posted
技术标签:
【中文标题】如何解决 authjs 上的用户未定义错误【英文标题】:How to resolve user undefined error on authjs 【发布时间】:2019-04-11 23:11:35 【问题描述】:使用 passport LocalStrategy 和 passport-jwt 创建 Web 令牌,但在 auth.js 上遇到 user 未定义错误**** 401 未经授权**** (if (!user) return res.json(401, error: 'message' );
)
如何解决这个问题,
auth.js
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser')
var LocalStrategy = require('passport-local').Strategy;
var jwt = require('jsonwebtoken');
var passport = require('passport');
/* User Model*/
var mongoose = require('mongoose');
var User = mongoose.model('User');
/* POST login. */
router.post('/login', function (req, res, next)
passport.authenticate('local', session: false, (err, user, info) =>
if (err) return next(err)
if (!user) return res.json(401, error: 'message' );
req.login(user, session: false, (err) =>
if (err)
res.send(err);
const token = jwt.sign(user, 'your_jwt_secret');
return res.json(user, token);
);
)(req, res, next);
);
module.exports = router;
passport.js
var passport = require('passport');
/* User Model*/
var mongoose = require('mongoose');
var User = mongoose.model('User');
var localStrategy = require('passport-local').Strategy;
var passportJWT = require("passport-jwt");
var JWTStrategy = passportJWT.Strategy;
var ExtractJWT = passportJWT.ExtractJwt;
passport.use(new localStrategy(
function (email, password, cb)
return User.findOne(email, password)
.then(user =>
if (!user)
return cb(null, false, message: 'Incorrect email or password.');
return cb(null, user,
message: 'Logged In Successfully'
);
)
.catch(err =>
return cb(err);
);
));
passport.use(new JWTStrategy(
jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(),
secretOrKey : 'your_jwt_secret'
,
function (jwtPayload, cb)
return User.findById(jwtPayload.id)
.then(user =>
return cb(null, user);
)
.catch(err =>
return cb(err);
);
));
【问题讨论】:
【参考方案1】:假设用户是一个对象:
if (user && Object.keys(user).length)
return res.json(401, error: 'message' );
【讨论】:
很可能,它没有在您的数据库中找到用户或检查输入(电子邮件、密码)是否已从客户端成功检索。 如何在passportjs上传递req.body.email?以上是关于如何解决 authjs 上的用户未定义错误的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Eclipse IDE 中删除用户定义路径的错误“未解决的包含”