如何解决 authjs 上的用户未定义错误

Posted

技术标签:

【中文标题】如何解决 authjs 上的用户未定义错误【英文标题】:How to resolve user undefined error on authjs 【发布时间】:2019-04-11 23:11:35 【问题描述】:

使用 passport LocalStrategypassport-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 中删除用户定义路径的错误“未解决的包含”

如何解决这个未定义的偏移量:0 错误?

如何解决 Flutter 应用上的 Google Play 未优化 APK 问题?

什么是未定义的引用/未解决的外部符号错误,我该如何解决?

什么是未定义的引用/未解决的外部符号错误,我该如何解决?