Passport Authenticate 功能在节点 api 中不起作用
Posted
技术标签:
【中文标题】Passport Authenticate 功能在节点 api 中不起作用【英文标题】:Passport Authenticate function is not working in node api 【发布时间】:2017-04-12 23:54:54 【问题描述】:我在登录时使用jwt-simple
节点模块创建令牌。
以下是我的代码:
apiRoutes.put('/login', function(req, res, next)
User.findOne(email:req.body.email, function(err, user)
bcrypt.compare(req.body.password, user.password, function(err, result)
if(result)
var token=jwt.encode(user,config.secret);
return res.json(token:token);
else
return res.json("Incorrect Email and Password")
)
)
);
令牌创建成功。
现在我正在尝试对/dashboard
路由中的用户进行身份验证。
apiRoutes.get('/dashboard', passport.authenticate('jwt', session: false), function(req, res)
var token=getToken(req.headers);
if(token)
var decode=jwt.decode(token, config.secret);
User.findOne(name:decode.name, function(err, user)
if(err)res.json(err)
if(!user)
return res.status(403).send(success:false, msg:'Authentication Failed')
else
res.json(success:true, msg:'Welcome in the Area' +user.name+'!')
)
else
return res.status(403).send(success:false, msg:'No Token Found')
);
getToken = function (headers)
if (headers && headers.authorization)
var parted = headers.authorization.split(' ');
if (parted.length === 2)
return parted[1];
else
return null;
else
return null;
;
问题是,当我在postman
上点击此API 时,它显示Unauthorized
,当我从路由中删除护照身份验证功能passport.authenticate('jwt', session: false)
时,它会打印success:false, msg:'No Token Found'
。
我不知道如何解决这个问题。请看看我的代码,让我知道我的错在哪里。
帮助表示赞赏。 谢谢
【问题讨论】:
如果使用 passport.authenticate('jwt', session: false),目的是什么?以及它在调试或记录时提供的令牌。passport.authenticate('jwt', session: false)
用于检查令牌是否有效。但是当我在路线上使用它时,它会给出Unauthorized
。这意味着token
无效或什么???我没有得到
【参考方案1】:
据我了解。您需要在使用 passport.authenticacte() 函数之前定义一个策略。检查this link。而且我认为您可以使用passport-jwt module 而不是simple-jwt。希望对您有所帮助。
【讨论】:
我正在关注this 教程。即使他也在使用jwt-simple
,它也能正常工作。
那么您是否按照教程创建了 jwt 策略?查看教程中的“创建我们的策略和用户”部分。
您确定您是通过 parted[1] 变量中的 getToken 函数中的标头接收令牌吗?
可能不是。如何检查?
只需打印 headers.authorization 并告诉我你得到了什么以上是关于Passport Authenticate 功能在节点 api 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Passport.authenticate 导出-> passport.authenticate(一些东西)(req,res,next)?
如何从sails action2调用Passport Authenticate函数
passport.authenticate()如何确定successRdirect或failureRedirect?
Facebook护照身份验证,导出passport.authenticate方法
在发布路线上使用 nodemailer 发送电子邮件并使用 passport.authenticate 将用户保存到 mongodb
passport-local-mongoose:createStrategy 不是一个函数/authenticate 不是一个函数