use*_*965 14 javascript node.js passport.js
我正在尝试使用passport-jwt设置JWT身份验证.我想我采取了正确的步骤,但测试GET不会成功,我不知道如何调试它.
这就是我所做的:
尽可能直接设置passport-jwt
var jwtOptions = {
secretOrKey: 'secret',
issuer: "accounts.examplesoft.com", // wasn't sure what this was, so i left as defaulted in the doc
audience: "yoursite.net" // wasn't sure what this was, so i left as defaulted in the doc
};
jwtOptions.jwtFromRequest = ExtractJwt.fromAuthHeader();
passport.use(new JwtStrategy(jwtOptions, function(jwt_payload, done) {
User.findOne({id: jwt_payload.sub}, function(err, user) {
if (err) {
return done(err, false);
}
if (user) {
done(null, user);
} else {
done(null, false);
// or you could create a new account
}
});
}));
Run Code Online (Sandbox Code Playgroud)向我的用户/登录端点添加了令牌结果
var jwt = require('jsonwebtoken');
// ...
exports.postLogin = function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) throw err;
if (!user) {
return res.send({ msg: 'Login incorrect' });
}
req.logIn(user, function(err) {
if (err) throw err;
var secretOrKey = jwtOptions.secretOrKey;
var token = jwt.sign(user, secretOrKey, {
expiresIn: 631139040 // 20 years in seconds
});
res.send({ user: user, jwtToken: "JWT " + token });
});
})(req, res, next);
};
Run Code Online (Sandbox Code Playgroud)事情看起来很顺利.我可以登录用户(使用护照本地身份验证),响应是我希望...
{"user":{"_ id":"56c8b5bd80d16ef41ec705dd","email":"peachy@keen.com","password":"$ 2a $ 10 $ zd ... etc.","__ v":0,} ,"jwtToken":"JWT eyJ0eXAiOiJ ....等" }
我创建了一个像这样的无保护测试路线......
// in my routes file
app.get('/user/tokenTest', user.tokenTest);
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,一个简单的终点......
exports.tokenTest = function(req, res) {
console.log(req.headers);
res.send("token test!!");
};
Run Code Online (Sandbox Code Playgroud)
并且GET-ing也可以正常工作.
但后来我尝试像这样保护这条路线:
app.get('/user/tokenTest', passport.authenticate('jwt', { session: false }),
user.tokenTest);
Run Code Online (Sandbox Code Playgroud)在我这样做之后,只有悲伤.我发送这样的请求:
curl -k 'https://localhost:3443/user/tokenTest' -H 'Authorization: JWT eyJ0eXAiOiJ... etc.'
Run Code Online (Sandbox Code Playgroud)
永远,总是得到401:
擅自
控制器中的控制台日志似乎没有执行,也没有登录passport.use
策略方法.我已经调整和调整,但我有点失落.护照-jwt文档仅提供示例,几乎没有其他帮助.
请问,关于我上面的错误,或者至少如何进行调试的任何想法?
use*_*965 26
对于跟随我的任何可怜的灵魂:passport-jwt doc意味着auth标题看起来像这样......
授权:JWT JSON_WEB_TOKEN_STRING .....
这结果是误导(对我来说,无论如何).
幸运的是,由于这篇文章,我能够学习如何构建令牌.(令牌的前缀直到第一个'.'是该方案的base64编码.前面的"JWT"是阻止验证工作的噪音.
所以解决方法是更改用户控制器返回的令牌:
res.send({ user: user, jwtToken: "JWT " + token });
Run Code Online (Sandbox Code Playgroud)
更简单:
res.send({ user: user, jwtToken: token });
Run Code Online (Sandbox Code Playgroud)
唷.是这样的,还是在这么多节点包文档中解释这些东西是不是真的有点不可思议?
归档时间: |
|
查看次数: |
10974 次 |
最近记录: |