我正在使用Ionic 4和Node API构建移动应用程序。 但是我的身份验证有问题。我使用的是pitt-jwt,例如这里的
championshipRouter.put('/subscribe/:id', this.passport.authenticate('jwt', { session: false }), (req, res) => {
if (!req.params || !req.params.id) { sendBodyError(res, 'No param provided'); }
registerOrUnsubscribeToTheChampionship(req.user._id, req.params.id)
.then( apiRes => sendApiSuccessResponse(res, 'Player has been added to the championship', apiRes) )
.catch( apiErr => sendApiErrorResponse(res, 'Error during adding', apiErr) )
});
当我在Postman上进行测试时,一切正常,但在Ionic 4中的前端却无法正常工作。
在我的登录控制器中,我在用户对象中传递了令牌,然后像这样在我的login-page.component.ts中获取并将其存储在本地存储中:
public login = () => {
this.AuthService.login( this.form.value.email, this.form.value.password )
.then( apiResponse => {
console.log(apiResponse);
if (apiResponse.data.countConnection == 0) {
this.Router.navigate(['/tutorial']);
} else {
this.Router.navigate(['/']);
}
console.log(apiResponse.data.token);
this.Storage.set('access_token', apiResponse.data.token);
this.UtilsService.flashMessage('success', 'Vous vous êtes connecté avec succès !');
})
.catch( apiResponse => {
console.error(apiResponse);
this.UtilsService.flashMessage('error', 'L\'identifiant ou le mot de passe sont incorrects.');
})
}
此后,当我需要连接以执行操作时,我将令牌设置在标题中,例如-Championship.service.ts:
public registerOrUnsubscribeToTheChampionship = (itemId: String): Promise<any> => {
let store = this.Storage.get('access_token');
return store.then(data => {
this.token = data;
let myHeader = new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': `Bearer ${this.token}`
})
return this.HttpClient.put( this.apiUrl + '/subscribe/' + itemId, null, { headers: myHeader } )
.toPromise()
.then( apiResponse => Promise.resolve(apiResponse) )
.catch( apiResponse => Promise.reject(apiResponse) );
});
}
当我想在应用程序中执行此操作时,我遇到401未经授权的错误,但是,当我检查数据时,令牌位于我的标头中。
我试图在邮递员中使用Bearer令牌,但是我遇到了同样的问题,所以我建议错误不在这里...
如果您想检查我的文件,我会经过我的github存储库:https://github.com/florianrambur/PvP
您对此有任何想法吗?我尝试了很多事情,但我不明白自己的错误。
谢谢!
编辑:我只是在检查一些东西。在我的登录控制器中,当我在Angular和Ionic之间切换时,删除了这一行:
res.cookie("OTPBDtoken", user.generateJwt(), { httpOnly: true });
然后我将令牌添加到我的resolve对象中:
resolve({
_id: user._id,
pseudo: user.pseudo,
email: user.email,
parameters: user.parameters,
countConnection: user.countConnection,
token: user.generateJwt()
})
我认为问题出在这里,令牌现在似乎是错误的。