Flutter身份验证插件firebase_auth的使用
Flutter身份验证插件firebase_auth的使用
Firebase Auth for Flutter
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
更多关于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
运行你的应用。
注意事项
- 安全性:在实际应用中,不应将密码明文保存在客户端。
- 错误处理:上面的示例代码仅简单打印了错误信息,实际应用中应更详细地处理错误,并向用户提供有用的反馈。
- 用户管理:用户注册成功后,通常需要保存到数据库(如Firestore)中,以便管理用户信息和权限。
这个示例为你提供了一个基本的框架,你可以在此基础上扩展和完善你的身份验证功能。