Токен JWT еще не действителен - PullRequest
0 голосов
/ 07 мая 2018

В моем угловом веб-приложении есть кнопка входа в Google. После успешного входа я сохраняю профиль пользователя и id-токен. Идентификатор идентификатора устанавливается в каждом заголовке запроса, который я отправляю на мой пользовательский интерфейс API.

В настоящее время я получаю 2 проблемы с кодом ниже:

onGoogleSignInSuccess(event: GoogleSignInSuccess) {
var profile = event.googleUser.getBasicProfile();
var id_token = event.googleUser.getAuthResponse().id_token;

// store google user data in local storage
localStorage.setItem('googleUserProfile', JSON.stringify(profile));
localStorage.setItem('googleIdToken', JSON.stringify(id_token));

// check user's email address exist in Felix
this.userService.getUserByEmail(profile.getEmail()).subscribe(InUser => {
  this.globalService.setCurrentUser(InUser);
  this.router.navigate(['companylist']);
}, error => {
  this.errorLoggingIn = true;
  this.errorCode = error.status;
  console.log('error logging in: ' + JSON.stringify(error));
});
}
  1. В большинстве случаев мой API выдает ошибку «JWT еще не действителен» при попытке проверить id-токен с помощью Google. Кажется, работает один раз каждые 4 попытки.
  2. и ngOnInit не попадает при переходе к «companyList»

Однако, когда я использую модуль npm sngular5-social-auth и реализую следующий код:

public socialSignIn(socialPlatform: string) {
let socialPlatformProvider;
socialPlatformProvider = GoogleLoginProvider.PROVIDER_ID;

this.socialAuthService.signIn(socialPlatformProvider).then(
  (userData) => {
    console.log(socialPlatform + " sign in data : ", userData);
    // store google user data in local storage
    localStorage.setItem('currentGoogleUserData', JSON.stringify(userData));

    this.userService.getUserByEmail(userData.email).subscribe(InUser => {
      this.globalService.setCurrentUser(InUser);
      this.router.navigate(['companylist']);
    }, error => {
      this.errorLoggingIn = true;
      this.errorCode = error.status;
      console.log('error logging in: ' + JSON.stringify(error));
    });
  }
);
}

Кажется, все работает нормально. Я не получаю ошибку JWT, которая еще не является допустимой, и страница списка моей компании загружается данными.

Я решил перейти к варианту 1, потому что я получаю стандартную кнопку входа в Google.

есть идеи, в чем может быть разница между двумя кодами?

1 Ответ

0 голосов
/ 01 июня 2018

Проблема в том, что время на вашем сервере отличается от времени на сервере Google. И когда вы проверяете полученный токен от Google, возможно, он будет действителен в течение 1 или n секунд. Вот почему вы получаете ошибку JWT not yet valid

Чтобы исправить это, вы можете синхронизировать время вашего сервера со временем сервера Google. Google Doc, как это сделать, https://developers.google.com/time/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...