Как проверить, вошел ли пользователь в систему или нет с помощью "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
на