Passport js本地策略自定义回调"缺少凭证"

时间:2015-05-09 21:06:50

标签: node.js express passport.js

我对Node js,express 4和passport有一个非常烦人的问题。我已经尝试了所有我能想到的选择,但仍然没有解决方案。无法从其他帖子中找到解决此问题的解决方案。

代码:

app.post('/login', function(req, res, next) {

    console.log(req.body.user_email);
    console.log(req.body.user_password);

    passport.authenticate('local', function(err, user, info) {

        console.log(info);
...

问题在于,由于某种原因,护照无法获取凭据并在console.log(信息)"缺少凭据",但是当上面记录用户名和密码时,它们是正确的。还应正确配置本地策略:

passport.use(new LocalStrategy ({

    usernameField: 'user_email',
    passwordField: 'user_password',
    },

    function(username, password, done) {

        console.log(username);
        console.log(password);
...

"功能(用户名,密码,完成)"永远不会被运行,因为"缺少凭证"。

有趣的部分是来自另一个html / ejs页面,其中通过以下方式进行身份验证调用:

app.post('/login_user', passport.authenticate('local', { successRedirect: '/loginSuccess', failureRedirect: '/loginFailure' }));

问题不存在。

有人知道我在这里缺少什么吗?!?!

谢谢!

4 个答案:

答案 0 :(得分:1)

如何格式化HTML格式的数据

我在这里使用Postman来证明您的问题:

enter image description here 这不好

Just the output that I want 只是我想要的输出

未关闭(req,res)

虽然这可能没有多大关系,但如果我不这样做会出现同样的问题。

  1. 在启动passport.authenticate
  2. 之前调用req and res parameters
  3. 关闭passport.authenticate后,请使用(req, res)
  4. 完成

    您在函数结束时需要(req, res),如下所示:

    router.post('/signup', 
    (req, res, next) => passport.authenticate('whatever-your-strategy-name-is', function(err, user, info) {
    
        // Just to see the sample expected output
        res.send(JSON.stringify(info)).status(200)
    
      })(req, res)
    );
    

    在标准熟悉的JS中,它看起来像这样。

    router.post('/signup', function (req, res, next) {
    
      passport.authenticate('whatever-your-strategy-name-is', function(err, user, info) {
    
        // Just to see the sample expected output
        res.send(JSON.stringify(info)).status(200)
    
      })(req, res) // passport.authenticate ends here
    })
    

答案 1 :(得分:0)

以防万一这对将来的某人有用.. 如果您使用 POSTMAN 并发送 POST 请求(例如电子邮件和密码字段)并且您发现自己看到此“缺少凭据”响应,请确保响应的格式设置为 JSON 而不是 html 或文本造成这样一个简单的错误可能会让你卡住几个小时

答案 2 :(得分:0)

我收到这个缺少凭据的错误是当我将电子邮件作为第一个参数发送时,但护照本地策略接受第一个参数用户名 因此,您需要将其设置为这样的电子邮件:

passport.use(
    new LocalStrategy({ usernameField: "email" }, (email, password, done) => {

答案 3 :(得分:-1)

需要一个小错误或纠正。

你在做:

app.post('/login', function(req, res, next) {

    console.log(req.body.user_email);
    console.log(req.body.user_password);

    passport.authenticate('local', function(err, user, info) {

        console.log(info);

只需创建用户变量并设置传入的 user_email& user_password ,如下所示。

app.post('/login', function(req, res, next) {

    console.log(req.body.user_email);
    console.log(req.body.user_password);

    var user = req.body;

    passport.authenticate('local', function(err, user, info) {

        console.log(info); 

这应该有用。