Stacks-wallet-web: [连接]在手机上登录失败

创建于 2020-03-24  ·  22评论  ·  资料来源: blockstack/stacks-wallet-web

在移动设备上使用连接库(在Android上为Chrome和firefox)无法处理挂起的登录。

将打开带有auth响应的选项卡,但是不会调用onFinish函数。 这适用于台式机,例如适用于http://coronatrackerv1.s3-website-us-east-1.amazonaws.com/

可能的解决方法,手动检查userSession.isPendingSignin()并致电userSession.handlePendingSignIn()

impact-l size-s 🐛 Bug!

最有用的评论

好抓@muneebm 。 我对如何解决这个问题有一个想法。

所有22条评论

感谢您的报告@friedger

我需要做一些调查。 如果跨域postMessage在移动设备上出现问题,我不会感到惊讶。 如果未触发回调, redirectURL参数是否仍然有效? 如果没有,那肯定是一个错误。

如果未触发回调,则redirectURL参数仍然有效吗?

不知道你的意思在这里。 我该如何检查?

请参阅以下文档: https :

您可以包含redirectTo选项。 如果回调失败,则应使用authResponse参数将用户重定向到redirectTo ,就像当前blockstack.js的工作方式一样。

@hstove是提供其他迁移指南的问题,而不是本身修复错误吗?

这是来自支持用户,他在上面添加了此信息,但未对后续步骤给予响应。 这影响了coronatracker应用程序。

嗨,Blockstack支持,

我收到了发送您的信息,以查看我们是否可以解决正在开发CoronaTracker(https://coronatracker.me/)的问题。 几天前,由于我们在移动设备上登录时遇到问题,我们将此问题提交了https://github.com/blockstack/ux/issues/300

在Chrome iOS上-我们根本无法登录
在Safari iOS上-我们只能在尝试几次后才能登录

我们不认为这是我们的最终目标,但是如果确实如此,或者您对可能的结果有任何想法,请告诉我。 如果此问题已解决-您可以发送解决此问题的必要步骤吗?

是的,这里的解决方法是您需要在页面加载时在应用内部实现通常的userSession.handlePendingSignIn()流。 有可能我们可以让Connect自动执行此操作,但是我不是100%确信这是最好的主意。 我希望能收到有关该想法的反馈,但与此同时,我建议您在应用中手动实现该问题,以使其尽快得到修复。

因此,我对Blockstack还是一个相对较新的人-我们是说在移动设备上,我们必须以“传统”方式处理Blockstack auth,从而打开一个全新的窗口等吗? 或者,是否有一种方法可以同时使用ConnecthandlePendingSignIn()流量到移动设备,以便用户在移动设备或台式机上拥有相同的体验?

此处的解决方法是,您需要在页面加载时在应用内部实现通常的userSession.handlePendingSignIn()流。

仍然得到反馈,即使在加载时显式调用handlePendingSignIn的应用程序中,Connect仍然存在问题。 可以通过多次调用handlePendingSignIn来解释此问题吗?

因此,我对Blockstack还是一个相对较新的人-我们是说在移动设备上,我们必须以“传统”方式处理Blockstack auth,从而打开一个全新的窗口等吗? 或者,是否有一种方法可以同时使用Connect和handlePendingSignIn()流来移动设备,以便用户在移动设备或台式机上拥有相同的体验?

@SomeMoosery ,是的,您仍然必须在大多数移动浏览器中以“传统方式”进行处理。 这是因为移动浏览器不支持我们在原始应用和弹出窗口之间进行的跨域消息传递。 我们仍然有一个支持基于重定向的身份验证的后备,就像它以前的工作方式一样。

仍然得到反馈,即使在加载时显式调用handlePendingSignIn的应用程序中,Connect仍然存在问题。 是否可以通过不止一次调用handlePendingSignIn来解释此问题?

@njordhov你有例子吗?

是否可以通过不止一次调用handlePendingSignIn来解释此问题?

@njordhov你有例子吗?

移动登录失败无法通过应用多次调用handlePendingSignIn来解释。

CoronaTracker应用程序使用了我的react-blockstack程序包,该程序包在初始化Connect之前设置了handlePendingSignIn回调。 我怀疑这可能会引起冲突,但是CoronaTracker开发人员通过禁用react-blockstack初始化测试了这一假设,并且没有任何区别,在没有react-blockstack初始化的情况下,Connect登录在移动设备上仍然失败,就像在不使用react-blockstack软件包的应用程序。

顺便说一句: handlePendingSignIn实际上一次支持多个回调吗? 如果不是,也许应该这样,因此可以有多个订阅来进行身份验证状态更改。

Connect团队是否能够复制在移动设备上登录失败的问题? 我听说使用Banter时在移动设备上登录仍然失败。

即使$$$ AuthOptionsredirectTo参数,移动登录也不起作用。
我认为这是因为即使source.postMessage不成功,下面finalizeAuthResponse didSendMessageBack中的finalizeAuthResponse也可以设置为true
https://github.com/blockstack/ux/blob/f1921a7b109afb6c149e5f67df33ef52867cab96/packages/app/src/common/utils.ts#L53 -L78

好抓@muneebm 。 我对如何解决这个问题有一个想法。

@friedger @muneebm @njordhov @SomeMoosery

大家好,我在Android Chrome上通过移动连接登录运行,看来问题已解决。

请查看下面链接中的视频,并告诉我是否还有其他需要,或者我们可以解决此问题吗?

http://somup.com/cYhIoXjrET

有趣的是,尤其是因为您关注的链接来自CoronaTracker应用的旧版本,因此不会因为我们这方面的原因。 虽然不确定在Blockstack中的状态:)

@hstove @timstackblock听起来好像无法正常工作

image

让我看一看

@markmhx@hstove ,登录无法在移动设备上进行。 我将在下面附加BlockSurvey的authOptions,看一看。 让我知道,如果我需要更改。 谢谢。

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我们这里有更新的文档来支持重定向回退: https : //docs.blockstack.org/develop/connect/overview.html

@hstove ,感谢您的答复。

我们也有备用广告,请附上以下代码。 我们观察到,如果我们使用完成的回调,则不会考虑重定向。 因此,重定向甚至根本没有发生,因为下面的代码没有得到执行。 谢谢。

// BS登录模块
如果(this.userSession.isSignInPending()){

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

我在handlePendingSignIn()之后进行重定向,并遇到相同的问题。 我更大的问题是,在移动设备上,该应用程序停留在新的弹出窗口中,而不是关闭并返回到原始的调用窗口。

地点:
https://webby-daily.runkodapps.com/

视频/演示:
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]; }); } ...

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

markmhx picture markmhx  ·  6评论

hstove picture hstove  ·  6评论

markmhx picture markmhx  ·  27评论

dantrevino picture dantrevino  ·  10评论

aulneau picture aulneau  ·  12评论