Как управлять сеансом входа в Google (клиент JavaScript для входа в Google)

я пытаюсь реализовать вход в Google с помощью их нового API: https://developers.google.com/identity/sign-in/web/

Вход и выход работают нормально. Моя проблема в том, что я не знаю, как управлять сеансом на других страницах без серверной части.

Итак, я попробовал этот код - https://developers.google.com/identity/sign-in/web/session-state

И это не работает хорошо для меня. Я не хочу, чтобы кнопка входа в Google была на каждой странице. Если я удалю часть «auth2.attachClickHandler..», весь код не будет работать.

Все, что я хочу, это указать на других страницах (не на странице с кнопкой Google), если пользователь все еще подключен или нет. Можете вы помочь мне?

EDIT: я пробовал следующий код, предложенный в ответах, но получаю сообщение об ошибке: "Uncaught TypeError: Cannot read property 'init' of undefined"

Код:

var auth2 = gapi.auth2.init({
client_id : 'ID.apps.googleusercontent.com'
});
auth2.then(function() {
var isSignedIn = auth2.isSignedIn.get();
var currentUser = auth2.currentUser.get();
if (isSignedIn) {
    console.log("signed in");
    // User is signed in.
    // Pass currentUser to onSignIn callback.
 } else {
    console.log("NOT signed in");
    // User is not signed in.
    // call auth2.attachClickHandler
    // or even better call gapi.signin2.render
    }
}); 

person Vandervidi    schedule 26.06.2015    source источник
comment
Вы можете получить данные пользователя Google, как показано в ссылке, а затем сохранить в локальном хранилище. Лучше всего, если вы сохраните эти данные в течение X времени, например, тридцать минут. Но это хороший подход, сохраняйте пользовательские данные в локальном хранилище, но с моей стороны будет лучше всегда иметь серверную часть для выполнения дополнительных проверок в зависимости от конечного приложения, которое вам нужно сделать.   -  person Jose Mato    schedule 27.06.2015


Ответы (1)


Вы можете загрузить gapi.auth2 на все страницы и вызвать:

var auth2 = gapi.auth2.init(...);
auth2.then(function() {
  var isSignedIn = auth2.isSignedIn.get();
  var currentUser = auth2.currentUser.get();
  if (isSignedIn) {
    // User is signed in.
    // Pass currentUser to onSignIn callback.
  } else {
    // User is not signed in.
    // call auth2.attachClickHandler
    // or even better call gapi.signin2.render
  }
});

В этом решении кнопка входа отображается только тогда, когда пользователь не вошел в систему.

person Jarosław Gomułka    schedule 30.06.2015
comment
Я попробую в следующие дни и приму этот ответ, если он решит мою проблему. Спасибо - person Vandervidi; 01.07.2015
comment
на других страницах я получаю ошибки, например, gapi не определен. Возможно, потому что я не использую в них кнопку div. Есть ли способ избежать использования кнопки? - person Vandervidi; 05.07.2015
comment
См. stackoverflow.com/questions/29815870/ - person Jarosław Gomułka; 06.07.2015