Аутентификация Node API и Ionic 4 с использованием passport-jwt - PullRequest
0 голосов
/ 10 мая 2019

Я создаю мобильное приложение с 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Я думаю, что проблема в том, что токен, похоже, сейчас не прав.

...