Stacks-wallet-web: [Verbinden] Die Anmeldung auf dem Handy schlägt fehl

Erstellt am 24. März 2020  ·  22Kommentare  ·  Quelle: blockstack/stacks-wallet-web

Die Verwendung der Verbindungsbibliothek auf Mobilgeräten (Chrome und Firefox unter Android) kann die ausstehende Anmeldung nicht verarbeiten.

Eine Registerkarte mit der Authentifizierungsantwort wird geöffnet, die Funktion onFinish wird jedoch nicht aufgerufen. Dies funktioniert auf dem Desktop, z. B. für http://coronatrackerv1.s3-website-us-east-1.amazonaws.com/

Mögliche Umgehung, manuell nach userSession.isPendingSignin() und userSession.handlePendingSignIn() anrufen

impact-l size-s 🐛 Bug!

Hilfreichster Kommentar

Guter Fang @muneebm . Ich habe eine Idee, wie ich das beheben könnte.

Alle 22 Kommentare

Danke für den Bericht @friedger !

Ich muss Nachforschungen anstellen. Es würde mich nicht wundern, wenn Cross-Origin postMessage Probleme auf dem Handy hat. Funktioniert der Parameter redirectURL immer noch, wenn der Rückruf nicht ausgelöst wird? Wenn nicht, dann ist das definitiv ein Fehler.

Funktioniert der Parameter redirectURL immer noch, wenn der Rückruf nicht ausgelöst wird?

Ich bin mir nicht sicher, was du hier meinst. Wie könnte ich das überprüfen?

Siehe diese Dokumente: https://github.com/blockstack/ux/tree/master/packages/connect#authoptions

Sie können eine redirectTo -Option einschließen. Wenn der Rückruf fehlschlägt, sollte der Benutzer mit einem authResponse -Parameter zu redirectTo authResponse umgeleitet werden, genau wie die aktuelle Datei blockstack.js funktioniert.

@hstove ist dies eine Frage der Bereitstellung zusätzlicher Migrationsanweisungen, anstatt einen Fehler per se zu beheben?

Dies kommt von einem Support-Benutzer, der es oben hinzugefügt hat, aber keine Antwort auf die nächsten Schritte erhalten hat. Dies wirkt sich auf die Coronatracker-App aus.

Hallo Blockstack-Unterstützung,

Ich wurde zu Ihnen geschickt, um zu sehen, ob wir ein Problem lösen können, das wir bei der Entwicklung von CoronaTracker haben (https://coronatracker.me/). Vor einigen Tagen haben wir dieses Problem unter https://github.com/blockstack/ux/issues/300 eingereicht, da wir Probleme hatten, uns auf dem Handy anzumelden.

Unter Chrome iOS konnten wir uns überhaupt nicht anmelden
Unter Safari iOS konnten wir uns erst nach mehreren Versuchen anmelden

Wir glauben nicht, dass dies etwas für uns ist, aber wenn dies der Fall ist oder Sie eine Vorstellung davon haben, was es sein könnte, lassen Sie es mich bitte wissen. Wenn dieses Problem behoben wurde - können Sie die zur Behebung erforderlichen Schritte senden?

Ja, die Lösung hier ist, dass Sie beim Laden der Seite den üblichen userSession.handlePendingSignIn() -Fluss in Ihrer App implementieren müssen. Es ist möglich, dass Connect dies automatisch erledigt, aber ich bin mir nicht 100% sicher, ob dies die beste Idee ist. Ich würde mich über Feedback zu dieser Idee freuen, aber in der Zwischenzeit würde ich vorschlagen, dies manuell in Ihrer App zu implementieren, um es so schnell wie möglich zu beheben.

Ich bin also noch relativ neu in Blockstack - sagen wir, dass wir auf Mobilgeräten die Blockstack-Authentifizierung auf "traditionelle" Weise handhaben müssen, um ein völlig neues Fenster usw. zu öffnen? Oder gibt es eine Möglichkeit, sowohl Connect als auch handlePendingSignIn() Flow für Mobilgeräte gleichzeitig zu verwenden, damit die Benutzer auf Mobilgeräten oder Desktops die gleiche Erfahrung machen?

Die Lösung hier ist, dass Sie beim Laden der Seite den üblichen userSession.handlePendingSignIn () -Fluss in Ihrer App implementieren müssen.

Ich habe immer noch Feedback erhalten, dass das Problem auch in einer App, die beim Laden explizit handlePendingSignIn bei Connect geblieben ist. Kann dieses Problem möglicherweise dadurch erklärt werden, dass handlePendingSignIn mehrmals aufgerufen wird?

Ich bin also noch relativ neu in Blockstack - sagen wir, dass wir auf Mobilgeräten die Blockstack-Authentifizierung auf "traditionelle" Weise handhaben müssen, um ein völlig neues Fenster usw. zu öffnen? Oder gibt es eine Möglichkeit, den Flow "Connect" und "handlePendingSignIn ()" für Mobilgeräte zusammen zu verwenden, damit die Benutzer auf Mobilgeräten oder auf dem Desktop die gleiche Erfahrung machen?

@SomeMoosery , ja, Sie müssen in den meisten mobilen Browsern immer noch auf die "traditionelle Art" damit umgehen. Dies liegt daran, dass mobile Browser das Cross-Origin-Messaging, das wir zwischen der ursprünglichen App und dem Popup durchführen, nicht unterstützen. Wir haben immer noch einen Fallback, der die umleitungsbasierte Authentifizierung unterstützt, wie es früher funktioniert hat.

Ich habe immer noch Feedback erhalten, dass das Problem auch in einer App, die beim Laden explizit handlePendingSignIn aufgerufen hat, bei Connect blieb. Kann dieses Problem möglicherweise dadurch erklärt werden, dass handlePendingSignIn mehrmals aufgerufen wird?

@njordhov hast du ein Beispiel?

Kann dieses Problem möglicherweise dadurch erklärt werden, dass handlePendingSignIn mehrmals aufgerufen wird?

@njordhov hast du ein Beispiel?

Der Fehler bei der mobilen Anmeldung wird NICHT durch eine App erklärt, die handlePendingSignIn mehr als einmal aufruft.

Die CoronaTracker-App verwendet mein React -Blockstack- Paket, das einen handlePendingSignIn -Rückruf einrichtet, bevor Connect initialisiert wird. Ich vermutete, dass dies zu einem Konflikt führen könnte, aber die CoronaTracker-Entwickler testeten diese Hypothese, indem sie die React-Blockstack-Initialisierung deaktivierten, und es machte keinen Unterschied, dass die Connect-Anmeldung auf Mobilgeräten ohne react-blockstack -Initialisierung immer noch fehlschlug, genau wie in Apps, die das React-Blockstack-Paket nicht verwenden.

Übrigens: Unterstützt handlePendingSignIn tatsächlich mehr als einen Rückruf gleichzeitig? Wenn nicht, sollte dies möglicherweise der Fall sein, sodass die Änderung des Authentifizierungsstatus mehrfach abonniert werden kann.

Konnte das Connect-Team das Problem der fehlgeschlagenen Anmeldung auf Mobilgeräten replizieren? Ich habe gehört, dass die Anmeldung auf Mobilgeräten bei Verwendung von Banter immer noch fehlschlägt.

Die mobile Anmeldung funktioniert nicht, selbst wenn Sie redirectTo param in AuthOptions .
Ich denke, das liegt daran, dass didSendMessageBack in finalizeAuthResponse unten auf true selbst wenn source.postMessage nicht erfolgreich ist.
https://github.com/blockstack/ux/blob/f1921a7b109afb6c149e5f67df33ef52867cab96/packages/app/src/common/utils.ts#L53 -L78

Guter Fang @muneebm . Ich habe eine Idee, wie ich das beheben könnte.

@friedger @muneebm @njordhov @SomeMoosery

Hey Leute, ich habe das Mobile Connect-Login auf Android Chrome durchlaufen und es scheint, dass das Problem behoben wurde.

Bitte sehen Sie sich das Video unter dem folgenden Link an und lassen Sie mich wissen, ob noch etwas benötigt wird, oder können wir dieses Problem beheben?

http://somup.com/cYhIoXjrET

Interessant, zumal der Link, dem Sie gefolgt sind, aus einem alten Build der CoronaTracker-App stammt und daher nicht auf irgendetwas von uns zurückzuführen wäre. Unsicher den Status innerhalb von Blockstack :)

@ Timstackblock
Es funktioniert manchmal, aber nicht immer, denke ich.

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

Die Demo-App für die PR, die diesem Problem beigefügt ist:
https://xordrive.muneeb.now.sh/?p=stxconnect.id.blockstack_3a24fc92-baaf-4ae9-af6d-5d207d5a5d6b

@hstove @timstackblock klingt so, als würde es nicht wieder funktionieren

image

Lass mich mal sehen

Hallo @markmhx und @hstove , Login funktioniert nicht auf Mobilgeräten. Ich füge die AuthOptions von BlockSurvey unten hinzu, werfen Sie einen Blick darauf. Lassen Sie mich wissen, wenn ich etwas ändern muss. Vielen Dank.

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 Wir haben neuere Dokumente zur Unterstützung des Redirect-Fallbacks hier: https://docs.blockstack.org/develop/connect/overview.html

@hstove , Danke für deine Antwort.

Wir haben auch einen Fallback, indem wir den folgenden Code anhängen. Wir haben festgestellt, dass bei Verwendung eines fertigen Rückrufs die Umleitung nicht berücksichtigt wird. Die Umleitung findet also nicht einmal statt, da der folgende Code nicht ausgeführt wird. Vielen Dank.

// BS-Anmeldemodul
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");
    });
}

Ich leite nach meinem handlePendingSignIn () um und stoße auf dasselbe Problem. Mein größeres Problem ist, dass die App auf Mobilgeräten im neuen Popup-Fenster bleibt, anstatt zu schließen und zum ursprünglichen Anruffenster zurückzukehren.

Seite? ˅:
https://webby-daily.runkodapps.com/

Video / Demo:
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]; }); } ...

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen