javascript - 如何解决 authjs 上的用户未定义错误
问题描述
使用护照 LocalStrategy和passport-jwt创建 Web 令牌,但在 auth.js ****401 Unauthorized**** ( ) 上遇到用户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;
护照.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);
});
}
));
解决方案
假设用户是一个对象:
if (user && Object.keys(user).length) {
return res.json(401, { error: 'message' });
}
推荐阅读
- java - 按键后调用方法的问题
- javascript - 使用节点和mysql。在字符串变量处插入失败
- laravel - 密码确认不匹配?
- c++ - 使用 std::is_same_v 而不是重载或专业化有任何潜在问题吗?
- angular - 'ng-select' 不是已知元素
- logfile - dotnetcore 使用 TraceListener - 需要刷新和关闭然后重新打开和附加
- python - 强制随机森林分类器使用所有输入特征?
- c - 在 C 中使用链表指针进行插入排序
- php - 如果 PDO 中的变量为空或空变量,则防止更新列
- java - 我在java中尝试这段代码任何人都可以解释输出的差异