【问题标题】:how to send json data under passport local strategy如何在护照本地策略下发送json数据
【发布时间】:2018-02-28 13:26:55
【问题描述】:

这是我的护照登录处理程序。

现在我想在每种情况下发送 JSON 数据,以便 API 可以访问响应并代表此在前端显示任何内容。

//Login Handler
passport.use('local-user', new LocalStrategy(
  function(username, password, done) {
    User.getUserByUsername(username, function(err, user){
        if(err) {
            console.log('error')
            logger.log('error', 'Error Generates on User.getUserByUsername Query on users.js file');
            throw err;
        }
        if(!user){
            //res.send('unknown user');
            console.log('Unknown User');
            return done(null, false, {message: 'Unknown User'});
        }
        User.comparePassword(password, user.password, function(err, isMatch){
            if(err) {
                logger.log('error', 'Error Generates on User.comparePassword Query on users.js file');
                throw err;
            }
            if(isMatch){
                return done(null, user);
            }else{
                return done(null, false, {message: 'Invalid Credential, please check carefully...!'})
            }
        });
    });
  }
));

有人对此有任何想法吗?提前致谢

【问题讨论】:

  • 你能告诉我们你的登录端点吗?

标签: node.js callback passport.js passport-local


【解决方案1】:

本地策略将使用 done() 传递用户或错误,然后您通过回调接收它并使用 res.json() 打包它

这是我的实现。可以帮忙吗?

passport.use(
      new LocalStrategy(
        {
          usernameField: "email"
        },
        function(username, password, done) {
          User.findOne({ email: username }, function(err, user) {
            if (err) {
              return done(err);
            }
            if (!user) {
              return done(null, false, {
                email: "Email not found"
              });
            }
            if (!user.validPassword(password)) {
              return done(null, false, {
                password: "Password is wrong"
              });
            }
            return done(null, user);
          });
        }
      )
    );

    router.post("/login", function(req, res) {
      passport.authenticate("local", function(err, user, info) {
        if (err) {
          res.status(404).json(err);
          return;
        }

        if (user) {
          const token = user.generateJwt();
          res.status(200);
          res.json({
            userInfo: user,
            token: token
          });
        } else {
          res.status(401).json(info);
        }
      })(req, res);
    });

【讨论】:

  • 它工作...请告诉回调参数,即信息?
  • info 是护照的 done 函数传递的自定义错误消息。例如,“密码错误”设置为第三个变量做对了吗?
  • 我遇到了问题。通过这种方法发送请求和响应,但未设置我的会话。我以前的方法是自动存储会话。为什么这个不做。有什么想法吗??
  • 啊,是的。在我的实现中,使用了 JWT。我没有使用会话。这篇文章可能会有所帮助。 (sitepoint.com/passport-authentication-for-nodejs-applications)
猜你喜欢
  • 2016-05-29
  • 2016-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 2020-01-04
相关资源
最近更新 更多