FB.login отличает успешный вход в систему от отмены, если пользователь подключил приложение раньше - PullRequest
0 голосов
/ 15 марта 2019

У нас есть вызов FB.login, подобный этому:

FB.login(function (response) {
  if (response.status === 'connected') {
    responseFunction(response.authResponse.userID);
  } else {
    responseFunction(null);
  }
}, { scope: requiredPermissions.concat(optionalPermissions).join(','), return_scopes: true });

Он правильно обнаруживает отмененный вход в систему, если пользователь еще не подключился к приложению. Однако, если пользователь уже подключен, когда он отменяет вход в систему, response выглядит следующим образом:

authResponse: {
  accessToken: "token",
  data_access_expiration_time: 1560437437,
  expiresIn: 86963,
  reauthorize_required_in: 7776000,
  signedRequest: "bababa",
  userID: "userid"
},
status: "connected"

Почти как успешный ответ на вход К счастью, в ответе также есть поле grantedScopes, если вход выполнен правильно (из-за опции return_scopes). Однако использование его для различения 2 кажется ненадежным и хакерским.

Есть ли лучший способ?

Заранее спасибо!

Обновление: Почему бы вместо этого не использовать FB.getLoginStatus?

Для контекста: в моем случае FB.login используется для предоставления доступа к страницам пользователя. Сам по себе он не используется для входа в приложение.

Я буду счастлив, если кто-то укажет на ошибку в моих рассуждениях. Вот оно:

  1. Вызов FB.login сразу после FB.getLoginStatus ненадежен из-за модального блока в браузерах. FB.login должен вызываться синхронно в обработчике кликов.
  2. Результат FB.getLoginStatus может истечь и истечет при его вызове до отображения кнопки, вызывающей FB.login. Пользователь может и будет тратить много времени на этой конкретной странице, прежде чем нажать кнопку.

Вот почему обработчик нажатия кнопки немедленно вызывает FB.login. Это помогает избежать обеих упомянутых проблем.

1 Ответ

0 голосов
/ 28 марта 2019

Я использовал в ответ grantedScopes в качестве индикатора полного входа в систему.

...