- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
这是我的代码(现在“应用程序”只是一些虚拟页面)
import 'dart:async';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:flutter/foundation.dart';
// ************** Begin Auth
final FirebaseAuth _auth = FirebaseAuth.instance;
final GoogleSignIn _googleSignIn = new GoogleSignIn();
Future<FirebaseUser> signInWithGoogle() async {
// Attempt to get the currently authenticated user
GoogleSignInAccount currentUser = _googleSignIn.currentUser;
if (currentUser == null) {
// Attempt to sign in without user interaction
currentUser = await _googleSignIn.signInSilently();
}
if (currentUser == null) {
// Force the user to interactively sign in
currentUser = await _googleSignIn.signIn();
}
final GoogleSignInAuthentication auth = await currentUser.authentication;
// Authenticate with firebase
final FirebaseUser user = await _auth.signInWithGoogle(
idToken: auth.idToken,
accessToken: auth.accessToken,
);
assert(user != null);
assert(!user.isAnonymous);
return user;
}
Future<Null> signOutWithGoogle() async {
debugPrint('in the SIGN OUT FUNCTION');
await _auth.signOut();
await _googleSignIn.signOut();
}
// ************** ENd Auth
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.yellow,
),
home: new SplashPage(),
routes: <String, WidgetBuilder>{
'/login': (BuildContext context) => new LoginPage(),
'/app': (BuildContext context) => new AppPage(),
},
);
}
}
class SplashPage extends StatefulWidget {
@override
State createState() => new _SplashPageState();
}
class _SplashPageState extends State<SplashPage> {
final FirebaseAuth _auth = FirebaseAuth.instance;
@override
void initState() {
super.initState();
_auth.onAuthStateChanged.firstWhere((user) => user != null).then((user) {
debugPrint('AUTH STATE HAS CHANGED');
debugPrint('user id: '+user.uid);
Navigator.of(context).pushReplacementNamed('/app');
});
new Future.delayed(new Duration(seconds: 1)).then((_) => signInWithGoogle());
}
@override
Widget build(BuildContext context) {
return new Text('splash 123');
}
}
class AppPage extends StatelessWidget {
void _logout(){
debugPrint('pressed logout button');
signOutWithGoogle();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('In Da App'),
actions: <Widget>[
new IconButton(icon: new Icon(Icons.list), onPressed: _logout),
],
),
body: new Text('Welcome'),
);
}
}
class LoginPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Scaffold(
body: new Text('You gotta login'),
);
}
}
为什么 onAuthStateChanged 不检测用户何时注销。此外,这是我单击注销按钮时控制台的屏幕截图。
根据控制台输出,我可以确认代码实际上正在根据我在那里的 debugPrint() 到达注销功能。我对控制台正在记录感到好奇:
"Notifying auth state listeners."
然后立即记录:
"Notified 0 auth state listeners."
最佳答案
你应该使用 StreamBuilder
以确保您的小部件得到通知。如果你看onAuthStateChanged
它实际上返回一个 Stream<FirebaseUser>
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: new StreamBuilder(
stream: _auth.onAuthStateChanged,
builder: (context, snapshot) {
// Simple case
if (snapshot.hasData) {
return AppPage();
}
return SplashPage();
},
),
);
}
}
关于firebase - 如何在 Flutter 中将 onAuthStateChanged 用于 Firebase Auth?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50397372/
当用户访问我的站点时,我使用 onAuthStateChanged确定用户是否已经从先前的 session 中登录。 主要问题是它对于一小部分用户来说是不一致的 - 代码似乎没有检测到他们确实有一个有
这个问题在这里已经有了答案: Firebase stop listening onAuthStateChanged (2 个答案) 关闭 6 年前。 以前我在 firebase.auth.curre
我正在尝试制作一个跟踪用户身份验证状态的模块。目前看起来像这样: import FbApp from './firebase-app'; var AuthStatus = { LoggedIn
当我登录后立即刷新网页时,以下代码会生成一个空用户。此外,当访问 token 过期时,页面会自动注销。如何解决这个问题? function initApp() { firebase.auth(
我一直在为 React Native 应用程序使用 Firebase 匿名身份验证,主要是为了确保用户只能读/写他们自己的数据(例如检查安全规则中的 auth && auth.uid) 以前,使用 F
在我的flutter应用程序中,我尝试使用Provider包中的ChangeNotifier将Firebase用户对象传递给降序的小部件。我的第一个想法是在StreamBuilder中执行以下操作:
我正在使用Firebase身份验证和Firestore数据库创建一个flutter应用程序,以存储用户个人资料。 验证用户身份后,我想将用户的个人资料文档作为流获取,并提供给所有小部件使用。 这是我的
我希望在我的应用中的用户状态发生变化时收到通知。我的意思是,当它刚刚登录和刚刚注销时。我不想在刷新用户 token 或每次应用程序启动并且用户自动登录时收到通知。 我正在使用预期的处理程序: Fire
我有这段代码可以检查用户是否已经在 Firebase 中登录,如果是,则使用 Redux 分派(dispatch)操作并将状态更新为当前授权用户。 /** * check to see if the
我是 Firebase 的新手。我正在尝试使用 React + Redux 登录。当我点击“登录”时,它将让我登录一次,然后再次调用 onAuthStateChanged 并且 res 为空,这让我退
我完全知道 onAuthStateChange 函数在注册后立即触发,但事实并非如此。在用户使用用户名和密码登录后,我遇到此功能触发两次的问题。第一次启动时,我追溯到堆栈,它来 self 的代码,但第
我在 login.html 中使用 Firebase 基于密码的身份验证。我有 2 个文本框和 3 个按钮。 我使用 firebase.OnAuthStateChanged 来了解用户是否登录或注销。
从版本 ^3.0.0 开始,我很难删除身份验证状态更改监听器。 根据文档启动监听器: firebase.auth().onAuthStateChanged(function (user) {
首次安装时,应用程序运行没有任何问题。 在启动画面检查登录状态。 用户未登录,导航到登录屏幕。 但 unsubscribe() 不是函数 当应用程序最小化然后重新打开时,错误显示并停留在启动画面。这只
当我将鼠标悬停在 onAuthStateChanged 上时,它会显示: (method) firebase.auth.Auth.onAuthStateChanged(nextOrObserver:
所以我在关注一个关于创建谷歌登录的教程。他说你需要使用 onAuthStateChanged收听登录/退出。我不明白的部分是他说该方法就像“开放订阅”,我们需要“关闭订阅”以防止内存泄漏。 所以在你看
在放弃运行 Express 的自己的 NodeJS 后端后,我们一直在应用程序上使用 Firebase,在此过渡期间,我们注意到一个主要缺点。客户端接收初始身份验证状态所需的时间。 当我的应用程序打开
我正在使用 firebase 创建一个应用程序。加载任何页面时,我都会通过以下代码检查身份验证。当我从登陆页面调用 isAuthenticated 时,即使用户已经登录并且持久性是 LOCAL( ht
我按照 Stack Overflow - How to redirect after a user signs in with Firebase authentication? 的说明进行操作 ind
目前我有一个授权系统来使用 angularfire 跟踪用户登录/注销状态。我正在查看的指南建议在每个 Controller 中使用 $onAuthStateChanged 。 $rootScope.
我是一名优秀的程序员,十分优秀!