Как проверить, вошел ли пользователь в систему или нет с помощью "Google Sign In" (OAuth 2.0)

я реализую Google войти в первый раз, как описано здесь и здесь.

Я использую HTML с Javascript.

проблема, которую необходимо решить, заключается в следующем: как я могу после первоначального входа в систему на другой странице (скажем, на целевой странице или портале, который пользователь видит после входа в систему), проверить, вошел ли пользователь в систему? Есть ли служба, которую я могу вызвать, чтобы проверить статус входа пользователя с помощью моего ключа приложения или что-то еще похожие? Я предполагаю, что мне придется включить Google API на каждой странице.

Код Страницы Входа:

скрипт в голове (код из учебника Google, перечисленных выше):

<head>
....
<script src="https://apis.google.com/js/platform.js" async defer></script>

<script>
function onSignIn(googleUser) 
{
  var profile = googleUser.getBasicProfile();
  console.log('ID: ' + profile.getId()); 
  console.log('Name: ' + profile.getName());
  console.log('Image URL: ' + profile.getImageUrl());
  console.log('Email: ' + profile.getEmail());

  alert(profile.getName());   
}

function logout()
{
    alert('logging out');
    var auth2 = gapi.auth2.getAuthInstance();
        auth2.signOut().then(function () {
        console.log('User signed out.');
        });
}
...
</head> 

код в теле (1-я строка из учебника Google, перечисленных выше, 2-я строка для запуска теста выхода из системы)

<body>
...
<div class="g-signin2" data-onsuccess="onSignIn"></div>
<div onmousedown="logout()">Logout</div>
...
</body>

есть ли способ включить Google API на другую страницу, а затем вызвать функцию проверки статуса входа? Или другой способ конкретно сказать, вошел ли пользователь в систему или нет?

2 ответов


вы можете stringify пользовательский объект userEntity и сохранить его в sessionStorage, где вы можете проверить его в любое время загрузки новой страницы. Я не тестировал следующее, Но он должен работать (делая что-то подобное с токенами WebAPI таким же образом)

function onSignIn(googleUser) 
{
  var profile = googleUser.getBasicProfile();
  console.log('ID: ' + profile.getId()); 
  console.log('Name: ' + profile.getName());
  console.log('Image URL: ' + profile.getImageUrl());
  console.log('Email: ' + profile.getEmail());
  
  var myUserEntity = {};
  myUserEntity.Id = profile.getId();
  myUserEntity.Name = profile.getName();
  
  //Store the entity object in sessionStorage where it will be accessible from all pages of your site.
  sessionStorage.setItem('myUserEntity',JSON.stringify(myUserEntity));

  alert(profile.getName());   
}

function checkIfLoggedIn()
{
  if(sessionStorage.getItem('myUserEntity') == null){
    //Redirect to login page, no user entity available in sessionStorage
    window.location.href='Login.html';
  } else {
    //User already logged in
    var userEntity = {};
    userEntity = JSON.parse(sessionStorage.getItem('myUserEntity'));
    ...
    DoWhatever();
  }
}

function logout()
{
  //Don't forget to clear sessionStorage when user logs out
  sessionStorage.clear();
}

конечно, вы можете иметь некоторые внутренние проверки, если объект sessionStorage подделан. Этот подход должен работать с современными браузерами, как Chrome и Firefox.


вам не нужно ничего хранить на локальном хранилище. Библиотека позволяет проверить, вошел ли пользователь в систему или не использует isSignedIn.get() на auth2 на