成功登录后,我获得了jwt令牌,现在为了访问受限API,我发送了授权头,但我始终收到“401未经授权”的错误。我参考了这里提出的使用passport-jwt验证节点API问题,但并没有帮助我。这是我调用以访问来自受限API的数据的函数。
这是我用来验证用户身份的护照策略,但奇怪的是它甚至没有打印这里,仍然发送401状态。
check() {
console.log(this.token);
var headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append("Authorization", "Bearer" + this.token);
let url = this.authenticationEndPoint + 'random';
this.checkauth(url, headers).subscribe(
data => {
console.log(data);
},
error => {
console.log("error");
}
);
}
checkauth(url:string, header:any): Observable<any> {
return this.http.get(url, header)
.map(this.extractData)
.catch(this.handleError);
}
private extractData(res: Response) {
let body = res;
return body || {};
}
这是我的Node.js服务器上发送JWT令牌的登录代码:
app.post('/login_mobile', function(req, res) {
if(!(req.body.email && req.body.passpord)) {
user.findOne({'local.email' : req.body.email}, function(err, user) {
if (err) { return done(err);}
if (!user) {
return res.json(200, "email is wrong");
}
if(!user.validPassword(req.body.password)) {
return res.json(200, "wrong password");
}
var token = jwt.encode(user, configAuth.secret);
return res.json(200, { user: user, jwtToken: token });
});
}
else {
res.send("no credentials provided");
}
});
响应受限制的API请求的代码
app.get('/random', passport.authenticate('jwt', { session: false }),
function(req, res) {
res.send("success");
});
这是我用来验证用户身份的护照策略,但奇怪的是它甚至没有打印这里,仍然发送401状态。
var opts = {};
opts.secretOrKey = configAuth.secret;
opts.jwtFromRequest = ExtractJwt.fromAuthHeader();
passport.use(new JwtStrategy(opts, function(jwt_payload, done){
console.log("here");
console.log(jwt_payload);
User.findOne({_id: jwt_payload._id}, function(err, found_user) {
if (err) {
return done(err, false);
}
if(found_user !== null) {
res.send("finally");
}
else {
res.send("authentication failed");
}
return found_user ? done(null, found_user) : done(null, false);
})
}));
如果有人能指出我的错误,请告诉我。