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()
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?
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
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];
});
}
...
Comentários muito úteis
Boa captura @muneebm . Tenho uma ideia de como posso consertar isso.