Stacks-wallet-web: [connect] La connexion échoue sur le mobile

Créé le 24 mars 2020  ·  22Commentaires  ·  Source: blockstack/stacks-wallet-web

L'utilisation de la bibliothèque de connexion sur mobile (Chrome et Firefox sur Android) ne parvient pas à gérer la connexion en attente.

Un onglet avec la réponse d'authentification est ouvert, cependant, la fonction onFinish n'est pas appelée. Cela fonctionne sur le bureau, par exemple pour http://coronatrackerv1.s3-website-us-east-1.amazonaws.com/

Solution possible, vérifiez manuellement userSession.isPendingSignin() et appelez userSession.handlePendingSignIn()

impact-l size-s 🐛 Bug!

Commentaire le plus utile

Bonne capture @muneebm . J'ai une idée de la façon dont je pourrais résoudre ce problème.

Tous les 22 commentaires

Merci pour le rapport @friedger !

J'ai besoin de faire quelques recherches. Je ne serais pas surpris si l'origine croisée postMessage a des problèmes sur mobile. Le paramètre redirectURL fonctionne-t-il toujours si le rappel n'est pas déclenché? Sinon, c'est définitivement un bug.

Le paramètre redirectURL fonctionne-t-il toujours si le rappel n'est pas déclenché?

Je ne suis pas sûr de te comprendre. Comment pourrais-je vérifier cela?

Consultez ces documents: https://github.com/blockstack/ux/tree/master/packages/connect#authoptions

Vous pouvez inclure une option redirectTo . Si le rappel échoue, l'utilisateur doit être redirigé vers redirectTo avec un paramètre authResponse , tout comme le fonctionnement actuel de blockstack.js.

@hstove s'agit-il de fournir des conseils de migration supplémentaires plutôt que de corriger un bogue en soi?

Cela provient d'un utilisateur du support qui l'a ajouté ci-dessus, mais n'a pas reçu de réponse sur les étapes suivantes. cela a un impact sur l'application coronatracker.

Salut le soutien de Blockstack,

On m'a envoyé pour voir si nous pouvions résoudre un problème que nous rencontrons en développant CoronaTracker (https://coronatracker.me/). Il y a quelques jours, nous avons déposé https://github.com/blockstack/ux/issues/300 ce problème, car nous rencontrions des difficultés pour nous connecter sur mobile.

Sur Chrome iOS - nous n'avons pas du tout pu nous connecter
Sur Safari iOS - nous n'avons pu nous connecter qu'après plusieurs tentatives

Nous ne pensons pas que ce soit quelque chose de notre part, mais si c'est le cas ou si vous avez des idées de ce que cela pourrait être, faites-le moi savoir. Si ce problème a été résolu, pourriez-vous envoyer les étapes nécessaires pour le résoudre?

Oui, le correctif ici est que vous devrez implémenter le flux userSession.handlePendingSignIn() habituel

Je suis donc encore relativement nouveau dans Blockstack - est-ce que nous disons que sur mobile, nous devrons gérer l'authentification Blockstack de la manière "traditionnelle" où cela ouvre une toute nouvelle fenêtre, etc. Ou, existe-t-il un moyen d'utiliser les flux Connect et handlePendingSignIn() en tandem pour mobile afin que les utilisateurs aient la même expérience sur mobile ou sur ordinateur?

le correctif ici est que vous devrez implémenter le flux usuel userSession.handlePendingSignIn () à l'intérieur de votre application, lors du chargement de la page.

J'ai toujours reçu des commentaires indiquant que le problème persistait avec Connect même dans une application qui appelait explicitement handlePendingSignIn au moment du chargement. Ce problème peut-il s'expliquer par le fait que handlePendingSignIn est appelé plus d'une fois?

Je suis donc encore relativement nouveau dans Blockstack - est-ce que nous disons que sur mobile, nous devrons gérer l'authentification Blockstack de la manière "traditionnelle" où cela ouvre une toute nouvelle fenêtre, etc. Ou, existe-t-il un moyen d'utiliser à la fois le flux Connect et handlePendingSignIn () en tandem pour mobile afin que les utilisateurs aient la même expérience sur mobile ou ordinateur de bureau?

@SomeMoosery , oui, vous devrez toujours le gérer de manière «traditionnelle» sur la plupart des navigateurs mobiles. En effet, les navigateurs mobiles ne prennent pas en charge la messagerie d'origine croisée que nous faisons entre l'application d'origine et la fenêtre contextuelle. Nous avons toujours une solution de secours qui prend en charge l'authentification basée sur les redirections, comme cela fonctionnait auparavant.

J'ai encore reçu des commentaires indiquant que le problème persistait avec Connect, même dans une application qui appelait explicitement handlePendingSignIn au moment du chargement. Ce problème peut-il être expliqué par le fait que handlePendingSignIn est appelé plusieurs fois?

@njordhov avez-vous un exemple?

Ce problème peut-il être expliqué par le fait que handlePendingSignIn est appelé plusieurs fois?

@njordhov avez-vous un exemple?

L'échec de connexion mobile n'est PAS expliqué par une application appelant handlePendingSignIn plus d'une fois.

L'application CoronaTracker utilise mon package react-blockstack , qui configure un rappel handlePendingSignIn avant l'initialisation de Connect. Je soupçonnais que cela pouvait provoquer un conflit, mais les développeurs de CoronaTracker ont testé cette hypothèse en désactivant l'initialisation de react-blockstack, et cela ne faisait aucune différence, la connexion à la connexion échouait toujours sur mobile sans initialisation de react-blockstack , tout comme elle le fait dans applications qui n'utilisent pas le package react-blockstack.

BTW: handlePendingSignIn en charge plus d'un rappel à la fois? Sinon, c'est peut-être le cas, il peut donc y avoir plusieurs souscriptions au changement d'état d'authentification.

L'équipe Connect a-t-elle pu répliquer le problème de l'échec de connexion sur mobile? J'entends que la connexion échoue toujours sur le mobile lors de l'utilisation de Banter.

La connexion mobile ne fonctionne pas même si vous avez redirectTo param dans AuthOptions .
Je pense que c'est parce que didSendMessageBack dans finalizeAuthResponse ci-dessous pourrait être défini sur true même si source.postMessage échoue.
https://github.com/blockstack/ux/blob/f1921a7b109afb6c149e5f67df33ef52867cab96/packages/app/src/common/utils.ts#L53 -L78

Bonne capture @muneebm . J'ai une idée de la façon dont je pourrais résoudre ce problème.

@friedger @muneebm @njordhov @SomeMoosery

Hé les gars, j'ai parcouru la connexion mobile connect sur Android Chrome et il semble que le problème a été résolu.

S'il vous plaît voir la vidéo dans le lien ci-dessous et laissez-moi savoir si quelque chose d'autre est nécessaire ou pouvons-nous résoudre ce problème?

http://somup.com/cYhIoXjrET

Intéressant, d'autant plus que le lien que vous avez suivi provient d'une ancienne version de l'application CoronaTracker et n'aurait donc pas été dû à quoi que ce soit de notre côté. Je ne suis pas sûr du statut dans Blockstack :)

@timstackblock
Cela fonctionne parfois, mais pas toujours, je pense.

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

L'application de démonstration pour le PR attaché à ce numéro:
https://xordrive.muneeb.now.sh/?p=stxconnect.id.blockstack_3a24fc92-baaf-4ae9-af6d-5d207d5a5d6b

@hstove @timstackblock semble ne plus fonctionner

image

Laisse-moi regarder

Bonjour @markmhx et @hstove , La connexion ne fonctionne pas sur mobile. Je joins les authOptions de BlockSurvey ci-dessous, jetez un œil. Faites-moi savoir si je dois changer quelque chose. Merci.

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 Nous avons des documents plus récents pour prendre en charge la redirection de secours ici: https://docs.blockstack.org/develop/connect/overview.html

@hstove , merci pour votre réponse.

Nous avons également une solution de secours, en joignant le code ci-dessous. Nous avons observé que, si nous utilisons le rappel terminé, la redirection ne sera pas prise en compte. Donc, la redirection ne se produit même pas, car le code ci-dessous n'est pas exécuté. Merci.

// Module de connexion 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");
    });
}

Je redirige après mon handlePendingSignIn () et rencontre le même problème. Mon plus gros problème est que sur mobile, l'application reste dans la nouvelle fenêtre contextuelle, plutôt que de se fermer et de revenir à la fenêtre d'appel d'origine.

placer:
https://webby-daily.runkodapps.com/

vidéo / démo:
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]; }); } ...

Cette page vous a été utile?
0 / 5 - 0 notes