Flutter身份验证插件firebase_auth的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

Flutter身份验证插件firebase_auth的使用

Firebase Auth for Flutter

pub package

Flutter 的一个插件,用于使用 Firebase Authentication API

要了解更多关于 Firebase Auth 的信息,请访问 Firebase 网站

Getting Started

要开始使用 Flutter 的 Firebase Auth,请参阅文档

Usage

要使用此插件,请访问 身份验证用法文档

Issues and feedback

请在我们的 issue tracker 中提交特定于 FlutterFire 的问题、错误或功能请求。

非特定于 FlutterFire 的插件问题可以在 Flutter issue tracker 中提交。

要为此插件贡献更改,请查阅我们的 contribution guide,并打开一个pull request

示例代码

以下是一个完整的示例 demo,演示了如何使用 firebase_auth 插件进行用户身份验证:

// Copyright 2022, the Chromium project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:io';

import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:google_sign_in_dartio/google_sign_in_dartio.dart';

import 'auth.dart';
import 'firebase_options.dart';
import 'profile.dart';

/// Requires that a Firebase local emulator is running locally.
/// See https://firebase.google.com/docs/auth/flutter/start#optional_prototype_and_test_with_firebase_local_emulator_suite
bool shouldUseFirebaseEmulator = false;

late final FirebaseApp app;
late final FirebaseAuth auth;

// Requires that the Firebase Auth emulator is running locally
// e.g via `melos run firebase:emulator`.
Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // We're using the manual installation on non-web platforms since Google sign in plugin doesn't yet support Dart initialization.
  // See related issue: https://github.com/flutter/flutter/issues/96391

  // We store the app and auth to make testing with a named instance easier.
  app = await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );
  auth = FirebaseAuth.instanceFor(app: app);

  if (shouldUseFirebaseEmulator) {
    await auth.useAuthEmulator('localhost', 9099);
  }

  if (!kIsWeb && Platform.isWindows) {
    await GoogleSignInDart.register(
      clientId:
          '406099696497-g5o9l0blii9970bgmfcfv14pioj90djd.apps.googleusercontent.com',
    );
  }

  runApp(const AuthExampleApp());
}

/// The entry point of the application.
///
/// Returns a [MaterialApp].
class AuthExampleApp extends StatelessWidget {
  const AuthExampleApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Firebase Example App',
      theme: ThemeData(primarySwatch: Colors.amber),
      home: Scaffold(
        body: LayoutBuilder(
          builder: (context, constraints) {
            return Row(
              children: [
                Visibility(
                  visible: constraints.maxWidth >= 1200,
                  child: Expanded(
                    child: Container(
                      height: double.infinity,
                      color: Theme.of(context).colorScheme.primary,
                      child: Center(
                        child: Column(
                          mainAxisAlignment: MainAxisAlignment.center,
                          children: [
                            Text(
                              'Firebase Auth Desktop',
                              style: Theme.of(context).textTheme.headlineMedium,
                            ),
                          ],
                        ),
                      ),
                    ),
                  ),
                ),
                SizedBox(
                  width: constraints.maxWidth >= 1200
                      ? constraints.maxWidth / 2
                      : constraints.maxWidth,
                  child: StreamBuilder<User?>(
                    stream: auth.authStateChanges(),
                    builder: (context, snapshot) {
                      if (snapshot.hasData) {
                        return const ProfilePage();
                      }
                      return const AuthGate();
                    },
                  ),
                ),
              ],
            );
          },
        ),
      ),
    );
  }
}

这个示例展示了如何初始化 Firebase 应用,并根据用户的登录状态切换显示不同的页面。它还展示了如何配置和使用 Firebase 认证模拟器(如果需要)。


更多关于Flutter身份验证插件firebase_auth的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter身份验证插件firebase_auth的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用firebase_auth插件进行身份验证的示例代码。这个示例展示了如何设置Firebase认证,并使用电子邮件和密码进行用户注册和登录。

1. 设置Firebase项目

首先,你需要在Firebase控制台中创建一个项目,并添加你的Flutter应用。确保你已经在Firebase控制台中启用了Email/Password认证方法。

2. 添加依赖

在你的pubspec.yaml文件中添加firebase_auth依赖:

dependencies:
  flutter:
    sdk: flutter
  firebase_auth: ^3.3.10  # 确保使用最新版本

3. 配置Firebase

确保你已经按照Firebase文档配置了google-services.json(Android)和GoogleService-Info.plist(iOS)。

4. 编写代码

下面是一个基本的Flutter应用示例,展示了如何使用firebase_auth进行用户注册和登录。

import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Firebase Auth Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: AuthScreen(),
    );
  }
}

class AuthScreen extends StatefulWidget {
  @override
  _AuthScreenState createState() => _AuthScreenState();
}

class _AuthScreenState extends State<AuthScreen> {
  final FirebaseAuth _auth = FirebaseAuth.instance;
  String _email = '';
  String _password = '';
  bool showSpinner = false;

  void _signUp() async {
    setState(() {
      showSpinner = true;
    });

    try {
      UserCredential userCredential = await _auth.createUserWithEmailAndPassword(
        email: _email,
        password: _password,
      );

      // 用户注册成功后的操作,比如跳转到主页
      // Navigator.pushNamed(context, '/home');
      print('User registered: ${userCredential.user?.email}');
    } catch (e) {
      print(e.message);
    }

    setState(() {
      showSpinner = false;
    });
  }

  void _signIn() async {
    setState(() {
      showSpinner = true;
    });

    try {
      UserCredential userCredential = await _auth.signInWithEmailAndPassword(
        email: _email,
        password: _password,
      );

      // 用户登录成功后的操作,比如跳转到主页
      // Navigator.pushNamed(context, '/home');
      print('User signed in: ${userCredential.user?.email}');
    } catch (e) {
      print(e.message);
    }

    setState(() {
      showSpinner = false;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Firebase Auth Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              keyboardType: TextInputType.emailAddress,
              decoration: InputDecoration(labelText: 'Email'),
              onChanged: (value) {
                _email = value;
              },
            ),
            SizedBox(height: 16.0),
            TextField(
              obscureText: true,
              decoration: InputDecoration(labelText: 'Password'),
              onChanged: (value) {
                _password = value;
              },
            ),
            SizedBox(height: 16.0),
            ElevatedButton(
              onPressed: _signUp,
              child: Text('Sign Up'),
            ),
            SizedBox(height: 16.0),
            ElevatedButton(
              onPressed: _signIn,
              child: Text('Sign In'),
            ),
            SizedBox(height: 16.0),
            if (showSpinner)
              CircularProgressIndicator(),
          ],
        ),
      ),
    );
  }
}

5. 运行应用

确保你已经使用flutter pub get安装了依赖,并使用flutter run运行你的应用。

注意事项

  1. 安全性:在实际应用中,不应将密码明文保存在客户端。
  2. 错误处理:上面的示例代码仅简单打印了错误信息,实际应用中应更详细地处理错误,并向用户提供有用的反馈。
  3. 用户管理:用户注册成功后,通常需要保存到数据库(如Firestore)中,以便管理用户信息和权限。

这个示例为你提供了一个基本的框架,你可以在此基础上扩展和完善你的身份验证功能。

回到顶部