Flatter Web和Firebase身份验证:如何重定向Flatter Web中未登录的用户?
我正在使用FlatterWeb和Firebase开发一个web应用程序 我必须处理Firebase登录 假设我们有两个屏幕,我想要实现的情况如下:Flatter Web和Firebase身份验证:如何重定向Flatter Web中未登录的用户?,firebase,flutter,firebase-authentication,flutter-web,Firebase,Flutter,Firebase Authentication,Flutter Web,我正在使用FlatterWeb和Firebase开发一个web应用程序 我必须处理Firebase登录 假设我们有两个屏幕,我想要实现的情况如下: void checkAuthentication() { var url = window.location.href; var navigationService = locator<NavigationService>(); var loggedIn = this.isUserLoggedIn(); if (!loggedIn)
void checkAuthentication() {
var url = window.location.href;
var navigationService = locator<NavigationService>();
var loggedIn = this.isUserLoggedIn();
if (!loggedIn) {
navigationService.replaceWith(Routes.login);
} else {
if (url.contains("Login")) {
navigationService.replaceWith(Routes.homepage);
}
}
如果用户未登录:
- 在登录页面上重定向用户
- 如果他登录页面,在主页上重定向他
void checkAuthentication() {
var url = window.location.href;
var navigationService = locator<NavigationService>();
var loggedIn = this.isUserLoggedIn();
if (!loggedIn) {
navigationService.replaceWith(Routes.login);
} else {
if (url.contains("Login")) {
navigationService.replaceWith(Routes.homepage);
}
}
void checkAuthentication(){
var url=window.location.href;
var navigationService=locator();
var loggedIn=this.isUserLoggedIn();
如果(!loggedIn){
navigationService.replaceWith(Routes.login);
}否则{
if(url.contains(“登录”)){
导航服务.replaceWith(Routes.homepage);
}
}
}
navigationService是我从堆叠包()中获取的服务
此解决方案可行,但存在两个问题:
- 这不是正确的方法。我不可能在每个屏幕页面中都调用它
- 当您被重定向时,您可以看到显示新页面的转换
有没有更好的方法来实现这一点?与我在这里展示的方法不同?如果您有时间查看flifter/Firebase教程中的前几段视频,其中涉及基本身份验证。我是个新手,所以我会尽我最大的努力解释他是如何做到这一点的,而不会详细说明: 他有一个文件
wrapper.dart
,它使用一个自定义用户对象,该对象不断地流式传输身份验证状态。包装器根据身份验证状态决定用户应导航的位置
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
print(user);
// return either home or authenticate
if (user == null) {
return Authenticate();
} else {
return Home();
}
}
小部件构建(构建上下文){
最终用户=提供者(上下文);
打印(用户);
//返回主页或进行身份验证
if(user==null){
返回Authenticate();
}否则{
回家();
}
}
我在我的项目中使用了这段代码,效果很好。这段代码目前在最新版本的
firebase\u auth 0.18.0+1
上被破坏,因为它返回的是平台异常,而不是null
-感谢您的回答。但是,这种方法仅适用于移动设备,在移动设备上,您无法通过url链接访问特定页面。在FlatterWeb中,您有这种可能性,如果用户登录或未登录,则应相应地重定向用户。