标签: firebase-authentication

了解 addStateDidChangeListener firebase 身份验证

您好,我是 firebase 新手,想确认我对 auth 函数的理解。(addStateDidChangeListener)

一点背景:

当应用程序首次启动时,首先调用应用程序委托,然后调用此 sceneDelegate 函数。现在,它将根据用户是否登录来显示一个屏幕。如果他们没有注册,它将向他们显示我的登录/注册屏幕(self.createHandleSignInOrSignUp())。

现在有2个问题:

  1. 他们注册或登录后,应用程序会跳回到里面的这段代码.addStateDidChangeListener

    这是因为身份验证状态发生了变化,对吗?

  2. 此外,当应用程序运行时,您可以注销,然后调用此代码块。

    这是因为该函数在应用程序运行时始终“监听”身份验证状态更改?

下面的代码是我的 SceneDelegate.swift 文件的一部分以及我有疑问的函数。

谢谢

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

var window: UIWindow?

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    guard let windowScene = (scene as? UIWindowScene) else { return }

    window = UIWindow(frame: windowScene.coordinateSpace.bounds)

    window?.windowScene = windowScene

    handle = Auth.auth().addStateDidChangeListener({ auth, user in
        if (user != nil) {
            self.window!.rootViewController = self.createTabBar()
        }
        else {
            self.window!.rootViewController = self.createHandleSignInOrSignUp()
        }
    })

    window?.makeKeyAndVisible() …
Run Code Online (Sandbox Code Playgroud)

swift firebase-authentication

1
推荐指数
1
解决办法
2994
查看次数

如何在 Android 登录中获取 Firebase 身份验证令牌

我正在使用 Firebase 身份验证将用户登录到我的网络应用程序和 Android 应用程序。

Web 应用程序的流程允许我从客户端登录用户,然后将 Firebase 令牌传递到我的服务器,在服务器上我使用 Firebase 进行验证,然后再将各种用户信息添加到我的数据库。

我现在正在为 Android 尝试同样的操作,但在获取令牌时遇到一些问题。这是登录代码:

    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();
    // ...
    mAuth.createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener((MainActivity) context, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // ***I want to get the token here***
                        FirebaseUser fbUser = task.getResult().getUser();

                        // send user details and token to server

                    } else {
                        // If sign in fails, display a message to the user.

                        }
                    }
               }
          });
Run Code Online (Sandbox Code Playgroud)

在其他地方,我看到在 Firebase …

android firebase firebase-authentication

1
推荐指数
1
解决办法
1318
查看次数

Firebase 在中国仍然被屏蔽?

我不知道我的应用程序是否可以在中国运行,也不知道如何测试它。我在某处读到有一个 firebase 中文域名 .cn 正在运行。如果还没有的话,是否有可能将当前项目转移到中文域并使其运行?

如果我创建一个新项目并为我的 Firebase 服务选择中国服务器,那么它会对世界其他地区产生任何其他不利后果吗?这个解决方案实际上会迫使所有开发人员将 Firebase 服务器设在中国,这样他们就不会错过中国用户群,我认为这对某些人来说可能是一个问题。

我可能没有最好的想法,但任何建议和解决方法将不胜感激。

firebase firebase-authentication great-firewall-of-china google-cloud-firestore

1
推荐指数
1
解决办法
4769
查看次数

FirebaseAuth.instance.verifyPhoneNumber 无法正常工作 - Flutter

await FirebaseAuth.instance.verifyPhoneNumberawait FirebaseAuth.instance.verifyPhoneNumber从某种意义上说,在成功执行之前运行的代码无法正常工作。await并没有真正做好它的工作。

为了方便理解问题,我不会共享所有代码,仅共享相关代码。我有一个名为的视图CustRegView,我从用户那里获取电话号码并将其发送到名为 ViewModelCustRegViewModel,该视图应该根据其身份验证返回 true 或 false。

下面是视图的样子

class CustRegView extends StatelessWidget{
  final TextEditingController _controller = TextEditingController();

  @override
  Widget build(BuildContext context) {
    final deviceSize = MediaQuery.of(context).size;
    return BaseView<CustRegViewModel>( 
          builder: (context, model, child) => Scaffold(
    
    ...<some code>
    
    TextFeild( controller: _controller, ...<some code> )

    ...<some code>
    
    FlatButton (
        onPressed: () async {
            var registerSuccess = await model.register( _controller.text, context);
                                
            if (registerSuccess) {
                Navigator.pushNamed(context, 'newScreen');
            } else {
                UIHelper().showErrorButtomSheet(context, model.errorMessage);
            } …
Run Code Online (Sandbox Code Playgroud)

dart firebase firebase-authentication flutter

1
推荐指数
1
解决办法
2515
查看次数

我是否需要在 firebase 云函数中的 context.auth 对象上使用 verifyIdToken ?

使用可调用函数,我的目的是只允许登录用户调用它。

export const sendMessage = functions.https.onCall(async (data, context) => {
Run Code Online (Sandbox Code Playgroud)

context那里的参数中,我得到了身份验证令牌。但总的来说,我对 Firebase 还很陌生,我不想因为这里的误解而犯下严重错误。如果我注销了,context.auth就变成空——很容易。但我是否需要确保身份验证令牌是有效的,而不是通过调用“编造”verifyIdToken的?

如果不是,那么是否只是检查是否context.auth为 null 足以确保用户已登录?

firebase firebase-authentication google-cloud-functions

1
推荐指数
1
解决办法
486
查看次数

未为类型“UserCredential”定义方法“sendEmailVerification”。Firebase 颤动

我按照这篇博客文章在用户注册后向他们发送电子邮件验证,这是我在执行时遇到的问题sendEmailVerification()

未为类型“UserCredential”定义方法“sendEmailVerification”。尝试将名称更正为现有方法的名称,或定义名为“sendEmailVerification”的方法

但这篇博客文章的问题是,所使用的某些内容已被弃用,我设法解决了除此之外的大多数内容。

这是我的代码:-(您可以看到包名称的导入语句)

    import 'dart:async';
    
    import 'package:firebase_auth/firebase_auth.dart' as auth;
    import 'package:cloud_firestore/cloud_firestore.dart';
    
    class Auth {
      final auth.FirebaseAuth _firebaseAuth = auth.FirebaseAuth.instance;
    
      Future<String> signUp(String email, String password) async {
        try {
          final user = await _firebaseAuth
              .createUserWithEmailAndPassword(email: email, password: password);
          try {
            await user.sendEmailVerification(); // <== The error happens here
            return user;
          } catch (e) {
            print('Code was not sent!');
          }
        } catch (e) {
          print('An error occurred');
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)

你能帮我解决这个问题吗?谢谢!

dart firebase firebase-authentication flutter

1
推荐指数
1
解决办法
1382
查看次数

新版本的 Firebase onAuthStateChanged -&gt; authStateChanges 0

我正在将此代码迁移到最新版本的 firebase,目前我唯一遇到的问题是我的 auth.dart 文件中的这段代码。

@override
Stream<Users> get onAuthStateChanges {
  return _firebaseAuth.onAuthStateChanges.map(_userFromFirebase);

}
Run Code Online (Sandbox Code Playgroud)

为了迁移到最新版本,我这样写:

@override
Stream<Users> get authStateChanges {
  return _firebaseAuth.authStateChanges.map(_userFromFirebase);
}
Run Code Online (Sandbox Code Playgroud)

我不断收到此错误:

没有为类型“Function”定义方法“map”。

我似乎找不到任何有关如何正确编写它的文档。有人知道如何解决这个问题吗?

在此先感谢您的帮助

聚苯乙烯

如果您想知道为什么我要迁移此代码,我的模拟器不断抱怨 Firebase Core 插件丢失(我猜是由于 Google-services.json 文件)并且所有身份验证按钮都不起作用。单击后,我收到此“return firebase.google.cms”错误。模拟器工作正常,直到我最近对 ​​Xcode 进行更新,现在它给了我这个奇怪的错误代码,并且不会完成 flutter 运行。所以我想如果我获取了最新版本的 firebase 并更新了代码,相应地,我可以再次使用我的模拟器和/或模拟器。然后我在 authStateChanges.map 代码中遇到了上述问题,我们就在这里。

这是我的完整 auth.dart 文件供您参考:

class Users {
  final String uid;

  Users({@required this.uid});
}

abstract class AuthBase {
  Stream<Users> get authStateChanges;
  Future<Users> currentUser();
  Future<Users> signInAnonymously();
  Future<Users> signInWithEmailAndPassword(String email, String password);
  Future<Users> createUserWithEmailAndPassword(String email, String password);
  Future<Users> signInWithGoogle();
  Future<void> signOut();
}

class …
Run Code Online (Sandbox Code Playgroud)

dart firebase firebase-authentication flutter

1
推荐指数
1
解决办法
3680
查看次数

如何在令牌过期和/或刷新页面后使用 firebase 在 Next.js 中保留身份验证

我正在使用 firebase 和 next.js 构建一个应用程序。我在 firebase 的身份验证流程上遇到了困难。一切进展顺利,直到我注意到一个错误/错误。如果我让计算机登录到应用程序一段时间,并且每当刷新页面时,似乎都会导致我被重定向回登录页面。我可以明白为什么刷新会触发我的重定向,因为可能没有足够的时间来及时检查 onAuthStateChange 以便const { user } = useAuth()运行,因此由于初始页面加载时(刷新后)没有用户。它将进入{ else }导致我此时重定向。但有趣的是,如果我只需单击我的仪表板(受保护的页面)链接,我仍然可以通过身份验证。没有重定向。以下是我的身份验证组件的代码:

AuthComp.js:

import { useRouter } from "next/router";
import { useEffect, useState } from "react";
import { useAuth } from "../../context/AuthContext";
function LoadingScreen() {
    return <div className="fixed top-0 right-0 h-screen w-screen z-50 flex justify-center items-center">
        <div className="animate-spin rounded-full h-32 w-32 border-t-2 border-b-2 border-gray-900"></div>
    </div>
}
export function AuthComp(props) {
    const [isAuthenticated, setIsAuthenticated] = useState(false)
    const router = useRouter();
    const { user …
Run Code Online (Sandbox Code Playgroud)

javascript firebase firebase-authentication next.js

1
推荐指数
1
解决办法
2383
查看次数

Flutter firebase 登录用户在登录后返回 NULL currentUser

当使用 signInWithEmailAndPassword() API 在 firebase 中进行身份验证时,我无法获取有效的“当前”用户。

  1. 我使用用户名和密码登录应用程序
auth.signInWithEmailAndPassword()
Run Code Online (Sandbox Code Playgroud)
  1. 我登录后,用户将被带到主页

  2. 我尝试获取用户的 UID,但没有返回有效的用户。该调用发生在异步函数中,如下所示:

currentUser = await auth.currentUser();
Run Code Online (Sandbox Code Playgroud)

当前用户为空。

有什么想法可能导致这种情况吗?

firebase firebase-authentication flutter

1
推荐指数
1
解决办法
5795
查看次数

Firestore 安全规则:检查地图列表的值

文档看起来像这样

matches: [
{uid: ___ , ...},
{uid: ___ , ...},
]
Run Code Online (Sandbox Code Playgroud)

如何检查请求此操作的用户的 uid 是否在匹配的 uid 之一中?我尝试过这个,但没有成功。

uid 输入get(/databases/$(database)/documents/users/$(request.auth.uid)).data.matches.uid

感谢您的帮助!

firebase firebase-security firebase-authentication google-cloud-firestore

1
推荐指数
1
解决办法
1127
查看次数