Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – 在Passport.js认证失败时发送JSON响应大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
对不起,我是非常新的node.js所以我没有能够包装我的头这个还。我使用Node.js作为iPhone客户端的后端API服务器。我使用Passport.js来验证本地策略。相关代码如下:

// This is in user.js,my user model
UserscheR_971_11845@a.static('authenticate',function(username,password,callBACk) {
    this.findOne({ username: username },function(err,user) {
        if (err){
            console.log('findOne error occurred');
            return callBACk(err);
        }
        if (!user){
            return callBACk(null,falsE);
        }
        user.verifypassword(password,passwordCorrect){
            if (err){
                console.log('verifypassword error occurred');
                return callBACk(err);
            }
            if (!passwordCorrect){
                console.log('Wrong password');
                return callBACk(err,falsE);
            }
            console.log('User Found,returning user');
            return callBACk(null,user);
        });
    });
});

// This is in app.js
app.get('/loginfail',function(req,res){
    res.json(403,{message: 'Invalid username/password'});
});

app.post('/login',passport.authenticate('local',{ failureRedirect: '/loginfail',failureFlash: false }),res) {
       res.redirect('/');
});

现在,我已经设法将失败的登录重定向到/ loginfail,在那里我将一些JSON发送回iPhone客户端。然而,这没有足够的粒度。我想能够发回适当的错误到iPhone客户端,如:“没有找到用户”或“密码错误”。使用我现有的代码,我不知道如何这可以实现。

我试图关注在passport.js网站上的自定义回调的示例,但我只是无法得到它的工作,由于缺乏节点的理解。我如何修改我的代码,以便我能够发回一个res.json与适当的错误代码/消息?

编辑:我现在试图这样的东西:

// In app.js
app.post('/login',res,next) {
    passport.authenticate('local',user,info) {
        if (err) { return next(err) }
        if (!user) {
            console.log(info);
            // *** Display message without using flash option
            // re-render the login form with a message
            return res.redirect('/login');
        }
        console.log('got user');
        return res.json(200,{user_id: user._iD});
    })(req,next);
});

// In user.js
UserscheR_971_11845@a.static('authenticate',passwordCorrect){
            if (err){
                return callBACk(err);
            }
            if (!passwordCorrect){
                return callBACk(err,false,{message: 'bad password'});
            }
            console.log('User Found,user);
        });
    });
});

但回到我尝试console.log(信息),它只是说未定义。我不知道如何获得这个自定义回调工作…任何帮助将不胜感激!

解决方法

我相信回调函数你的’authenticate’静态调用(在代码中称为’回调’)接受第三个参数 – “info” – 你的代码可以提供。然后,不是传入{failureRedirect:…}对象,而是传递一个函数,该函数需要3个参数:err,user和info。您在验证方法中提供的“信息”将传递到此回调。

Passport调用此方案“自定义回调”。请参阅这里的文档:@H_874_31@http://passportjs.org/guide/authenticate/

大佬总结

以上是大佬教程为你收集整理的node.js – 在Passport.js认证失败时发送JSON响应全部内容,希望文章能够帮你解决node.js – 在Passport.js认证失败时发送JSON响应所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。