Я создаю мобильное приложение с Ionic 4 с Node API.Но у меня проблема с аутентификацией.Я делаю это с помощью passport-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.');
})
}
После этого, когда мне нужно бытьподключенный для выполнения действия, я получил токен для установки в моих заголовках вот так --ionship.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 несанкционированная ошибкаоднако токен находится в моем заголовке, когда я проверяю данные.
Пример запроса заголовка
Я пытался использовать токен на предъявителя, доступный в моем почтальоне., но у меня та же проблема, поэтому я предположил, что здесь нет ошибки ...
Если вы хотите проверить мои файлы, я прошёл мимо моего репозитория github: https://github.com/florianrambur/PvP
Doу тебя есть идеи по этому поводу?Я пробовал много вещей, но я не понимаю свою ошибку.
Спасибо!
РЕДАКТИРОВАТЬ: Я просто что-то проверяю.В контроллере входа в систему я удалил эту строку при переключении между Angular на Ionic:
res.cookie("OTPBDtoken", user.generateJwt(), { httpOnly: true });
И добавил токен в свой объект разрешения следующим образом:
resolve({
_id: user._id,
pseudo: user.pseudo,
email: user.email,
parameters: user.parameters,
countConnection: user.countConnection,
token: user.generateJwt()
})
IЯ думаю, что проблема в том, что токен, похоже, сейчас не прав.