Stacks-wallet-web: [conectar] Falha de login no celular

Criado em 24 mar. 2020  ·  22Comentários  ·  Fonte: blockstack/stacks-wallet-web

O uso da biblioteca de conexão no celular (Chrome e Firefox no Android) não consegue lidar com o login pendente.

Uma guia com a resposta de autenticação é aberta, no entanto, a função onFinish não é chamada. Isso funciona no desktop, por exemplo, para http://coronatrackerv1.s3-website-us-east-1.amazonaws.com/

Possível solução, verifique manualmente se há userSession.isPendingSignin() e chame userSession.handlePendingSignIn()

impact-l size-s 🐛 Bug!

Comentários muito úteis

Boa captura @muneebm . Tenho uma ideia de como posso consertar isso.

Todos 22 comentários

Obrigado pelo relatório @friedger !

Eu preciso fazer algumas investigações. Eu não ficaria surpreso se a origem cruzada postMessage tivesse problemas no celular. O parâmetro redirectURL ainda funciona se o retorno de chamada não for disparado? Se não, isso é definitivamente um bug.

O parâmetro redirectURL ainda funciona se o retorno de chamada não for disparado?

Não sei o que você quer dizer aqui. Como posso verificar isso?

Veja estes documentos: https://github.com/blockstack/ux/tree/master/packages/connect#authoptions

Você pode incluir uma opção redirectTo . Se o retorno de chamada falhar, o usuário deve ser redirecionado para redirectTo com um parâmetro authResponse , assim como o blockstack.js atual funciona.

@hstove é uma questão de fornecer orientação adicional de migração em vez de corrigir um bug em si?

Isso vem de um usuário de suporte que adicionou a ele acima, mas não recebeu uma resposta nas próximas etapas. isso está afetando o aplicativo coronatracker.

Olá, suporte do Blockstack,

Fui enviado para ver se poderíamos resolver um problema que estamos tendo ao desenvolver CoronaTracker (https://coronatracker.me/). Há alguns dias, registramos https://github.com/blockstack/ux/issues/300 esse problema, pois estávamos tendo problemas para fazer login no celular.

No Chrome iOS - não foi possível fazer login de forma alguma
No Safari iOS - só conseguimos fazer login após várias tentativas

Não acreditamos que seja algo nosso, mas se for ou se você tiver alguma ideia do que poderia ser, por favor, me avise. Se o problema foi resolvido - você poderia enviar as etapas necessárias para resolvê-lo?

Sim, a correção aqui é que você precisará implementar o fluxo normal de userSession.handlePendingSignIn() dentro do seu aplicativo, no carregamento da página. É possível que o Connect faça isso automaticamente, mas não tenho 100% de certeza de que essa seja a melhor ideia. Gostaria de receber feedback sobre essa ideia, mas, por enquanto, sugiro implementar isso manualmente em seu aplicativo para consertá-lo o mais rápido possível.

Portanto, ainda sou relativamente novo no Blockstack - estamos dizendo que no celular teremos que lidar com a autenticação do Blockstack da maneira "tradicional" em que abre uma janela inteiramente nova, etc? Ou existe uma maneira de usar o fluxo Connect e handlePendingSignIn() em conjunto para dispositivos móveis para que os usuários tenham a mesma experiência em dispositivos móveis ou desktops?

a correção aqui é que você precisará implementar o fluxo usual userSession.handlePendingSignIn () dentro do seu aplicativo, no carregamento da página.

Ainda recebi feedback de que o problema persistia com o Connect, mesmo em um aplicativo que chamava explicitamente handlePendingSignIn no momento do carregamento. Esse problema pode ser explicado por handlePendingSignIn ter sido chamado mais de uma vez?

Portanto, ainda sou relativamente novo no Blockstack - estamos dizendo que no celular teremos que lidar com a autenticação do Blockstack da maneira "tradicional" em que abre uma janela inteiramente nova, etc? Ou existe uma maneira de usar o fluxo Connect e handlePendingSignIn () em conjunto para dispositivos móveis para que os usuários tenham a mesma experiência em dispositivos móveis ou desktop?

@SomeMoosery , sim, você ainda terá que lidar com isso da 'maneira tradicional' na maioria dos navegadores móveis. Isso ocorre porque os navegadores móveis não suportam as mensagens de origem cruzada que fazemos entre o aplicativo original e o pop-up. Ainda temos um substituto que oferece suporte à autenticação baseada em redirecionamento, como costumava funcionar.

Ainda recebi feedback de que o problema persistia com o Connect, mesmo em um aplicativo que chamava explicitamente de handlePendingSignIn no momento do carregamento. Esse problema pode ser explicado por handlePendingSignIn sendo chamado mais de uma vez?

@njordhov você tem um exemplo?

Esse problema pode ser explicado por handlePendingSignIn sendo chamado mais de uma vez?

@njordhov você tem um exemplo?

A falha de login no celular NÃO é explicada por um aplicativo chamando handlePendingSignIn mais de uma vez.

O aplicativo CoronaTracker usa meu pacote react-blockstack , que configura um retorno de chamada handlePendingSignIn antes de o Connect ser inicializado. Suspeitei que isso pudesse causar um conflito, mas os desenvolvedores do CoronaTracker testaram essa hipótese desabilitando a inicialização react-blockstack e não fez diferença. O login do Connect ainda falhou no celular sem a inicialização de react-blockstack , assim como faz em aplicativos que não usam o pacote react-blockstack.

BTW: handlePendingSignIn realmente suportando mais de um retorno de chamada por vez? Se não, talvez devesse, então pode haver várias assinaturas para a alteração do estado de autenticação.

A equipe do Connect conseguiu replicar o problema de falha de login no celular? Ouvi dizer que o login ainda falha no celular ao usar o Banter.

O login móvel não está funcionando mesmo se você tiver redirectTo param em AuthOptions .
Acho que é porque didSendMessageBack em finalizeAuthResponse abaixo pode ser definido como true mesmo se source.postMessage não for bem-sucedido.
https://github.com/blockstack/ux/blob/f1921a7b109afb6c149e5f67df33ef52867cab96/packages/app/src/common/utils.ts#L53 -L78

Boa captura @muneebm . Tenho uma ideia de como posso consertar isso.

@friedger @muneebm @njordhov @SomeMoosery

Olá, pessoal, eu executei o login de conexão móvel no Android Chrome e parece que o problema foi resolvido.

Por favor, veja o vídeo no link abaixo e deixe-me saber se há mais alguma coisa necessária ou podemos resolver o problema?

http://somup.com/cYhIoXjrET

Interessante, especialmente porque o link que você seguiu é de uma versão antiga do aplicativo CoronaTracker, então não seria devido a nada do nosso lado. Embora não tenha certeza do status no Blockstack :)

@timstackblock
Às vezes funciona, mas nem sempre, eu acho.

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

O aplicativo de demonstração para o PR anexado a este problema:
https://xordrive.muneeb.now.sh/?p=stxconnect.id.blockstack_3a24fc92-baaf-4ae9-af6d-5d207d5a5d6b

@hstove @timstackblock parece que não está funcionando de novo

image

Deixe-me ver

Olá @markmhx e @hstove , o login não está funcionando no celular. Estou anexando as authOptions do BlockSurvey abaixo, dê uma olhada. Avise-me se houver algo que eu precise alterar. Obrigado.

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 Temos documentos mais recentes para suportar o fallback de redirecionamento aqui: https://docs.blockstack.org/develop/connect/overview.html

@hstove , Obrigado pela sua resposta.

Temos fallback também, anexando o código abaixo. Observamos que, se usarmos callback finalizado, o redirecionamento não será considerado. Portanto, o redirecionamento nem mesmo está acontecendo, já que o código abaixo não está sendo executado. Obrigado.

// Módulo de Login 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");
    });
}

Estou redirecionando após meu handlePendingSignIn () e encontro o mesmo problema. Meu maior problema é que no celular, o aplicativo permanece na nova janela pop-up, em vez de fechar e voltar para a janela de chamada original.

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

vídeo / demonstração:
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]; }); } ...

Esta página foi útil?
0 / 5 - 0 avaliações