Flutter web 无密码登录不会触发身份验证状态更改
Posted
技术标签:
【中文标题】Flutter web 无密码登录不会触发身份验证状态更改【英文标题】:Flutter web passwordless login does not trigger auth state change 【发布时间】:2020-06-11 16:27:07 【问题描述】:我正在尝试在 Flutter Web 应用程序中实现无密码登录。我使用了StreamBuilder
小部件来监控身份验证状态。
child: StreamBuilder<FirebaseUser>(
stream: FirebaseAuth.instance.onAuthStateChanged,
builder: (context, snapshot)
print("AuthStateChanged");
print(snapshot.connectionState);
if (snapshot.connectionState == ConnectionState.active)
print("Connection Active");
FirebaseUser user = snapshot.data;
if (user == null)
return LoginPage();
return LoggedIn();
else
print("Connection Inactive"); //Connection Inactive, show error dialog
return Text("***");
,
),
我在 firebase 中创建了一个动态链接 https://mypwakk.page.link/6SuK
,它指向一个要求用户返回应用的 html。
<!DOCTYPE html>
<html>
<head>
<title>Sign in via email</title>
</head>
<body>
<h1>You now have signed in.</h1>
<p>Go back to the same device you opened the app from and continue using the app as an authenticated user.</p>
</body>
</html>
然后使用FirebaseAuth.instance.signInWithEmailAndLink()
发送登录链接
收到电子邮件中的链接后,我单击它,它确实将我带到了 html 页面。此时我预计身份验证状态将在我的 StreamBuilder 中更改,并且处理程序打印调试消息。但我没有看到控制台上打印任何内容。
我错过了什么吗?任何帮助将不胜感激。
【问题讨论】:
如果用户登录到应用程序的不同实例,则只有 该 实例会登录。为确保您的onAuthStateChanged
触发,请确保链接在包含FirebaseAuth.instance.onAuthStateChanged
侦听器的应用实例中打开。
嗨@FrankvanPuffelen,它是同一个实例。发送电子邮件并单击链接时,它在 chrome 中打开。
嗯...我希望onAuthStateChanged
在这种情况下会触发,但必须承认我从未尝试过使用 Flutter Web。如果您强制检查currentUser
,是否真的在那里获得了身份验证状态?如果是这样,那至少只是听者的问题。
添加了一个带有onPressed: () async FirebaseUser user = await FirebaseAuth.instance.currentUser(); print(user.toString());
的按钮,得到null
。所以这不是监听器的问题。
【参考方案1】:
在对动态链接进行了一些实验后,我已经解决了这个问题。
我做错的是,
创建了一个 html 页面来处理链接点击。 创建了一个动态链接域。 创建了一个指向 html 页面 url 的动态链接。 在我发送电子邮件链接时将动态链接作为url
参数提供给actionCodeSettings
。
我应该做的,
创建一个 html 页面来处理链接点击。添加 java-script 处理程序以执行单击验证和登录过程。 创建动态链接域。 在我发送邮件链接时将html页面url作为url
参数和动态链接域作为dynamicLinkDomain
参数提供给actionCodeSettings
。
检查,https://firebase.google.com/docs/auth/web/email-link-auth#completing_sign-in_in_a_web_page。该文档确实指定了该过程,但来自颤动土地,将其翻译为颤动网络目标对我来说有点模糊。希望将来会有一些清晰的 Flutter Web 目标示例代码可用。
【讨论】:
以上是关于Flutter web 无密码登录不会触发身份验证状态更改的主要内容,如果未能解决你的问题,请参考以下文章
如果用户已经无密码登录,firebase 可以设置密码身份验证吗?
我是 Flutter Web 的新手,如何使用 Firebase 电话身份验证对用户进行身份验证,有没有办法让用户保持登录状态?