Stacks-wallet-web: [connect] Ошибка входа на мобильном телефоне

Созданный на 24 мар. 2020  ·  22Комментарии  ·  Источник: blockstack/stacks-wallet-web

При использовании библиотеки подключения на мобильном устройстве (Chrome и Firefox на Android) не удается обработать ожидающий вход.

Открывается вкладка с ответом auth, однако функция onFinish не вызывается. Это работает на рабочем столе, например, для http://coronatrackerv1.s3-website-us-east-1.amazonaws.com/

Возможное решение, проверьте вручную userSession.isPendingSignin() и вызовите userSession.handlePendingSignIn()

impact-l size-s 🐛 Bug!

Самый полезный комментарий

Хороший улов @muneebm . У меня есть идея, как это исправить.

Все 22 Комментарий

Спасибо за отчет @friedger !

Мне нужно провести расследование. Я не удивлюсь, если у postMessage с перекрестным происхождением возникнут проблемы на мобильных устройствах. Параметр redirectURL прежнему работает, если обратный вызов не запущен? Если нет, то это определенно ошибка.

Параметр redirectURL по-прежнему работает, если обратный вызов не запущен?

Не уверен, что вы здесь имеете в виду. Как я мог это проверить?

См. Эти документы: https://github.com/blockstack/ux/tree/master/packages/connect#authoptions

Вы можете включить опцию redirectTo . Если обратный вызов не работает, пользователь должен быть перенаправлен на redirectTo с параметром authResponse , точно так же, как работает текущий blockstack.js.

@hstove - это вопрос предоставления дополнительных рекомендаций по миграции, а не исправления ошибки как таковой?

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

Привет, поддержка Blockstack,

Меня отправили к вам, чтобы узнать, сможем ли мы решить проблему, возникающую при разработке CoronaTracker (https://coronatracker.me/). Несколько дней назад мы отправили https://github.com/blockstack/ux/issues/300 эту проблему, так как у нас возникли проблемы со входом в систему на мобильном устройстве.

В Chrome iOS - нам вообще не удалось войти в систему
В Safari iOS - мы смогли войти в систему только после нескольких попыток

Мы не верим, что это что-то с нашей стороны, но если это так или у вас есть идеи о том, что это может быть, пожалуйста, дайте мне знать. Если проблема была решена, не могли бы вы прислать необходимые шаги для ее решения?

Да, исправление здесь в том, что вам нужно будет реализовать обычный поток userSession.handlePendingSignIn() внутри вашего приложения при загрузке страницы. Возможно, мы могли бы настроить Connect автоматически, но я не уверен на 100%, что это лучшая идея. Я был бы признателен за отзывы об этой идее, но пока я предлагаю реализовать это вручную в вашем приложении, чтобы исправить это как можно скорее.

Так что я все еще относительно новичок в Blockstack - говорим ли мы, что на мобильных устройствах нам придется обрабатывать аутентификацию Blockstack «традиционным» способом, когда открывается совершенно новое окно и т. Д.? Или есть способ использовать потоки Connect и handlePendingSignIn() в тандеме для мобильных устройств, чтобы пользователи могли одинаково работать на мобильных устройствах или на компьютерах?

исправление заключается в том, что вам нужно будет реализовать обычный поток userSession.handlePendingSignIn () внутри вашего приложения при загрузке страницы.

По-прежнему есть отзывы о том, что проблема с Connect сохраняется даже в приложении, которое явно вызывало handlePendingSignIn во время загрузки. Можно ли объяснить эту проблему тем, что handlePendingSignIn вызывается более одного раза?

Так что я все еще относительно новичок в Blockstack - говорим ли мы, что на мобильных устройствах нам придется обрабатывать аутентификацию Blockstack «традиционным» способом, когда открывается совершенно новое окно и т. Д.? Или есть способ использовать потоки Connect и handlePendingSignIn () в тандеме для мобильных устройств, чтобы пользователи могли одинаково работать на мобильных устройствах или на компьютерах?

@SomeMoosery , да, вам все равно придется обрабатывать это «традиционным способом» в большинстве мобильных браузеров. Это связано с тем, что мобильные браузеры не поддерживают обмен сообщениями из разных источников, который мы делаем между исходным приложением и всплывающим окном. У нас все еще есть запасной вариант, который поддерживает аутентификацию на основе перенаправления, как раньше.

По-прежнему есть отзывы о том, что проблема с Connect сохраняется даже в приложении, которое явно вызывает handlePendingSignIn во время загрузки. Можно ли объяснить эту проблему тем, что handlePendingSignIn вызывается более одного раза?

@njordhov у вас есть пример?

Можно ли объяснить эту проблему тем, что handlePendingSignIn вызывается более одного раза?

@njordhov у вас есть пример?

Ошибка входа в систему с мобильного телефона НЕ объясняется тем, что приложение вызывает handlePendingSignIn более одного раза.

Приложение CoronaTracker использует мой пакет response-blockstack , который устанавливает обратный вызов handlePendingSignIn перед инициализацией Connect. Я подозревал, что это может вызвать конфликт, но разработчики CoronaTracker проверили эту гипотезу, отключив инициализацию response-blockstack, и это не имело никакого значения, вход в систему Connect все еще не удался на мобильном телефоне без инициализации react-blockstack , как и в приложения, которые не используют пакет response-blockstack.

Кстати: действительно ли handlePendingSignIn поддерживает более одного обратного вызова одновременно? Если нет, возможно, так и должно быть, поэтому может быть несколько подписок на изменение состояния аутентификации.

Смогла ли команда Connect воспроизвести проблему сбоя входа в систему на мобильном устройстве? Я слышу, что при использовании Banter все еще не удается войти на мобильный телефон.

Мобильный вход не работает, даже если у вас есть redirectTo param в AuthOptions .
Я думаю, это потому, что didSendMessageBack в finalizeAuthResponse ниже может быть установлено на true даже если source.postMessage не удалось.
https://github.com/blockstack/ux/blob/f1921a7b109afb6c149e5f67df33ef52867cab96/packages/app/src/common/utils.ts#L53 -L78

Хороший улов @muneebm . У меня есть идея, как это исправить.

@friedger @muneebm @njordhov @SomeMoosery

Привет, ребята, я запустил вход через мобильное соединение в Android Chrome, и, похоже, проблема решена.

Посмотрите видео по ссылке ниже и дайте мне знать, если что-то еще нужно, или мы можем решить эту проблему?

http://somup.com/cYhIoXjrET

Интересно, тем более что ссылка, по которой вы перешли, взята из старой сборки приложения CoronaTracker, поэтому с нашей стороны ничего не произошло. Однако не уверены в статусе Blockstack :)

@timstackblock
Иногда это срабатывает, но, думаю, не всегда.

xordrive:
https://xordrive.muneeb.now.sh/?p=stxconnect.id.blockstack_daa6bcc3-91c2-490e-b322-3db9c3fee4de

Демонстрационное приложение для PR, прикрепленное к этому выпуску:
https://xordrive.muneeb.now.sh/?p=stxconnect.id.blockstack_3a24fc92-baaf-4ae9-af6d-5d207d5a5d6b

@hstove @timstackblock похоже, что он снова не работает

image

Разреши мне взглянуть

Привет, @markmhx и @hstove! Логин не работает на мобильном устройстве. Я прилагаю варианты авторизации BlockSurvey ниже, посмотрите. Дайте мне знать, если мне что-то нужно изменить. Спасибо.

let authOptions = {
  redirectTo: '/dashboard',
  manifestPath: '/manifest.json',      
  sendToSignIn: false,
  userSession: this.userSession,
  appDetails: {
    name: 'BlockSurvey',
    icon: 'https://blocksurvey.io/assets/images/logo/blocksurvey-logo-login.svg'
  },
  finished: ({ userSession }) => {        
    window.location = "https://blocksurvey.io/dashboard";
  }
};

@BlockSurvey @muneebm У нас есть новые документы для поддержки резервного перенаправления здесь: https://docs.blockstack.org/develop/connect/overview.html

@hstove , спасибо за ответ.

У нас также есть запасной вариант, прикрепив код ниже. Мы заметили, что, если мы используем завершенный обратный вызов, перенаправление не будет рассматриваться. Таким образом, перенаправление даже не происходит, поскольку приведенный ниже код не выполняется. Спасибо.

// Модуль входа в BS
if (this.userSession.isSignInPending ()) {

  // If it is in progress
  this.userSession.handlePendingSignIn()
    .then((userData) => {
      // Always redirect to dashboard
      window.location = <any>(Constants.DOMAIN_URL + "/dashboard");
    });
}

Я перенаправляю после своего handlePendingSignIn () и сталкиваюсь с той же проблемой. Моя большая проблема заключается в том, что на мобильных устройствах приложение остается в новом всплывающем окне, а не закрывается и возвращается в исходное окно вызова.

сайт:
https://webby-daily.runkodapps.com/

видео / демо:
https://photos.app.goo.gl/YmBtn3RaV6NfivqD9

mounted() { if (userSession.isUserSignedIn()) { this.setProfile(); } else if (userSession.isSignInPending()) { userSession.handlePendingSignIn().then(() => { this.setProfile(); // window.location = window.location.href.split("?")[0]; }); } ...

Была ли эта страница полезной?
0 / 5 - 0 рейтинги