使用password-jwt无法验证Node API和Ionic 4的情况

时间:2019-05-10 20:22:45

标签: node.js angular passport.js ionic4

我正在使用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未经授权的错误,但是,当我检查数据时,令牌位于我的标头中。

Example of a header request

我试图在邮递员中使用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()
})

我认为问题出在这里,令牌现在似乎是错误的。

0 个答案:

没有答案