Stacks-wallet-web: [conectar] El inicio de sesión falla en el móvil

Creado en 24 mar. 2020  ·  22Comentarios  ·  Fuente: blockstack/stacks-wallet-web

El uso de la biblioteca de conexión en dispositivos móviles (Chrome y Firefox en Android) no puede manejar el inicio de sesión pendiente.

Se abre una pestaña con la respuesta de autenticación, sin embargo, no se llama a la función onFinish. Esto funciona en el escritorio, por ejemplo, para http://coronatrackerv1.s3-website-us-east-1.amazonaws.com/

Posible solución, verifique manualmente userSession.isPendingSignin() y llame a userSession.handlePendingSignIn()

impact-l size-s 🐛 Bug!

Comentario más útil

Buen partido @muneebm . Tengo una idea de cómo podría arreglar eso.

Todos 22 comentarios

¡Gracias por el informe @friedger !

Necesito investigar un poco. No me sorprendería si el origen cruzado postMessage tuviera problemas en el móvil. ¿El parámetro redirectURL todavía funciona si no se activa la devolución de llamada? Si no es así, definitivamente es un error.

¿Sigue funcionando el parámetro redirectURL si no se activa la devolución de llamada?

No estoy seguro de a qué te refieres aquí. ¿Cómo puedo comprobar eso?

Consulte estos documentos: https://github.com/blockstack/ux/tree/master/packages/connect#authoptions

Puede incluir una opción redirectTo . Si la devolución de llamada falla, el usuario debe ser redirigido a redirectTo con un parámetro authResponse , al igual que funciona blockstack.js actual.

@hstove, ¿ se trata de proporcionar una guía de migración adicional en lugar de corregir un error per se?

Esto proviene de un usuario de soporte que lo agregó anteriormente, pero no se le ha dado una respuesta sobre los próximos pasos. esto está afectando la aplicación coronatracker.

Hola, soporte de Blockstack,

Me enviaron a su manera para ver si podíamos resolver un problema que estamos teniendo al desarrollar CoronaTracker (https://coronatracker.me/). Hace unos días, presentamos https://github.com/blockstack/ux/issues/300 este problema, ya que teníamos problemas para iniciar sesión en un dispositivo móvil.

En Chrome iOS: no pudimos iniciar sesión en absoluto
En Safari iOS: solo pudimos iniciar sesión después de varios intentos

No creemos que esto sea algo de nuestra parte, pero si lo es o si tiene alguna idea de lo que podría ser, hágamelo saber. Si este problema se ha resuelto, ¿podría enviarnos los pasos necesarios para solucionarlo?

Sí, la solución aquí es que deberá implementar el flujo userSession.handlePendingSignIn() habitual dentro de su aplicación, en la carga de la página. Es posible que Connect haga esto automáticamente, pero no estoy 100% seguro de que sea la mejor idea. Agradecería sus comentarios sobre esa idea, pero mientras tanto, sugeriría implementarlo manualmente en su aplicación para solucionarlo lo antes posible.

Así que todavía soy relativamente nuevo en Blockstack, ¿estamos diciendo que en el móvil tendremos que manejar la autenticación de Blockstack de la forma "tradicional" en la que abre una ventana completamente nueva, etc.? O, ¿hay alguna manera de usar el flujo Connect y handlePendingSignIn() en conjunto para dispositivos móviles para que los usuarios tengan la misma experiencia en dispositivos móviles o de escritorio?

la solución aquí es que deberá implementar el flujo habitual userSession.handlePendingSignIn () dentro de su aplicación, en la carga de la página.

Aún recibí comentarios de que el problema permanecía con Connect incluso en una aplicación que llamaba explícitamente handlePendingSignIn en el momento de la carga. ¿Es posible que este problema se explique si se llama a handlePendingSignIn más de una vez?

Así que todavía soy relativamente nuevo en Blockstack, ¿estamos diciendo que en el móvil tendremos que manejar la autenticación de Blockstack de la forma "tradicional" en la que abre una ventana completamente nueva, etc.? O, ¿hay alguna manera de usar el flujo Connect y handlePendingSignIn () en conjunto para dispositivos móviles para que los usuarios tengan la misma experiencia en dispositivos móviles o de escritorio?

@SomeMoosery , sí, todavía tendrá que manejarlo de la 'forma tradicional' en la mayoría de los navegadores móviles. Esto se debe a que los navegadores móviles no admiten la mensajería de origen cruzado que hacemos entre la aplicación original y la ventana emergente. Todavía tenemos una alternativa que admite la autenticación basada en redirecciones, como la forma en que solía funcionar.

Aún recibí comentarios de que el problema permanecía con Connect incluso en una aplicación que llamaba explícitamente a handlePendingSignIn en el momento de la carga. ¿Es posible que este problema se explique si se llama a handlePendingSignIn más de una vez?

@njordhov , ¿tienes un ejemplo?

¿Es posible que este problema se explique si se llama a handlePendingSignIn más de una vez?

@njordhov , ¿tienes un ejemplo?

El error de inicio de sesión móvil NO se explica por una aplicación que llama handlePendingSignIn más de una vez.

La aplicación CoronaTracker usa mi paquete react-blockstack , que configura una devolución handlePendingSignIn llamada react-blockstack , tal como lo hace en aplicaciones que no usan el paquete react-blockstack.

Por cierto: ¿ handlePendingSignIn realmente admite más de una devolución de llamada a la vez? Si no es así, tal vez debería, por lo que puede haber múltiples suscripciones al cambio de estado de autenticación.

¿El equipo de Connect ha podido replicar el problema de la falla en el inicio de sesión en el móvil? Escuché que el inicio de sesión aún falla en el móvil cuando utilizo Banter.

El inicio de sesión móvil no funciona incluso si tiene redirectTo param en AuthOptions .
Creo que es porque didSendMessageBack en finalizeAuthResponse continuación podría establecerse en true incluso si source.postMessage no tiene éxito.
https://github.com/blockstack/ux/blob/f1921a7b109afb6c149e5f67df33ef52867cab96/packages/app/src/common/utils.ts#L53 -L78

Buen partido @muneebm . Tengo una idea de cómo podría arreglar eso.

@friedger @muneebm @njordhov @SomeMoosery

Hola chicos, ejecuté el inicio de sesión de conexión móvil en Android Chrome y parece que el problema se ha resuelto.

Por favor, vea el video en el enlace a continuación y avíseme si se necesita algo más o si podemos solucionar este problema.

http://somup.com/cYhIoXjrET

Interesante, especialmente porque el enlace que siguió es de una versión anterior de la aplicación CoronaTracker, por lo que no se habría debido a nada de nuestra parte. Sin embargo, no estoy seguro del estado dentro de Blockstack :)

@timstackblock
A veces funciona, pero no siempre, creo.

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

La aplicación de demostración para el RP adjunta a este problema:
https://xordrive.muneeb.now.sh/?p=stxconnect.id.blockstack_3a24fc92-baaf-4ae9-af6d-5d207d5a5d6b

@hstove @timstackblock suena como si no

image

Déjame ver

Hola @markmhx y @hstove , el inicio de sesión no funciona en el móvil. Adjunto las opciones de autorización de BlockSurvey a continuación, eche un vistazo. Avísame si necesito cambiar algo. Gracias.

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 Tenemos documentos más nuevos para respaldar el redireccionamiento alternativo aquí: https://docs.blockstack.org/develop/connect/overview.html

@hstove , Gracias por tu respuesta.

También tenemos respaldo, adjuntando el código a continuación. Observamos que, si usamos la devolución de llamada finalizada, no se considerará la redirección. Entonces, la redirección ni siquiera está sucediendo, ya que el código siguiente no se está ejecutando. Gracias.

// Módulo de inicio de sesión BS
si (this.userSession.isSignInPending ()) {

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

Estoy redirigiendo después de mi handlePendingSignIn () y me encuentro con el mismo problema. Mi mayor problema es que en el móvil, la aplicación permanece en la nueva ventana emergente, en lugar de cerrarse y volver a la ventana de llamada original.

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

video / demostración:
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]; }); } ...

¿Fue útil esta página
0 / 5 - 0 calificaciones