Flutter Firebase认证插件katana_auth_firebase的使用
Flutter Firebase认证插件katana_auth_firebase的使用
Katana Auth
[GitHub] | [YouTube] | [Packages] | [Twitter] | [Threads] | [LinkedIn] | [mathru.net]
简介
Firebase Authentication 在处理认证时非常有用。
通过它可以轻松实现多种类型的认证,包括通过电子邮件地址、电话号码和社交媒体账户进行认证。
然而,即使以后计划使用 Firebase 认证,也可能会有在创建应用原型时不想连接到服务器进行认证的情况,或者在测试代码中实现认证的需求。
因此,我实现了一个包,可以使用适配器在 Firebase 和本地认证之间切换,就像我在 katana_model
中所做的那样。
此外,接口经过改进,使得根据应用程序的不同,可以轻松地在 Google 登录和 Apple 登录之间切换。
安装
导入以下包:
flutter pub add katana_auth
如果你使用了 Firestore,还需要一起导入以下包:
flutter pub add katana_auth_firebase
实现
准备工作
始终将 <code>AuthAdapterScope</code>
小部件放置在应用的根附近。
传递一个适配器参数,如 <code>RuntimeAuthAdapter</code>
。
// main.dart
import 'package:flutter/material.dart';
import 'package:katana_auth/katana_auth.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return AuthAdapterScope(
adapter: const RuntimeAuthAdapter(),
child: MaterialApp(
home: const AuthPage(),
title: "Flutter Demo",
theme: ThemeData(
primarySwatch: Colors.blue,
),
),
);
}
}
创建认证对象
要执行认证,首先创建一个 <code>Authentication</code>
并将其保持在某个地方。
<code>Authentication</code>
对象可以获取以下数据以检查认证状态:
<code>isSignedIn</code>
:如果已认证则返回<code>true</code>
。<code>isAnonymously</code>
:对于匿名认证返回<code>true</code>
。<code>userId</code>
:返回用户 ID。<code>userEmail</code>
:如果进行了电子邮件认证等,则返回用户的电子邮件地址。<code>userPhoneNumber</code>
:如果进行了电话号码验证,则返回用户的电话号码。
此外,由于 <code>Authentication</code>
继承自 ChangeNotifier
,可以通过使用 <code>addListener</code>
或 riverpod 的 <code>ChangeNotifierProvider</code>
来监视更新。
// auth_page.dart
import 'package:flutter/material.dart';
import 'package:katana_auth/katana_auth.dart';
class AuthPage extends StatefulWidget {
const AuthPage({super.key});
@override
State<StatefulWidget> createState() => AuthPageState();
}
class AuthPageState extends State<AuthPage> {
final auth = Authentication();
@override
void initState() {
super.initState();
auth.addListener(_handledOnUpdate);
}
void _handledOnUpdate() {
setState(() {});
}
@override
void dispose() {
super.dispose();
auth.removeListener(_handledOnUpdate);
auth.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("App Demo")),
body: ListView(
children: [
ListTile(
title: Text("SignedIn: ${auth.isSignedIn}"),
),
ListTile(
title: Text("Anonymously: ${auth.isAnonymously}"),
),
ListTile(
title: Text("ID: ${auth.userId}"),
),
ListTile(
title: Text("Email: ${auth.userEmail}"),
),
ListTile(
title: Text("Phone: ${auth.userPhoneNumber}"),
),
],
),
);
}
}
用户注册与登录
使用 <code>auth.register</code>
方法来注册用户。
必须传递 <code>RegisterAuthProvider</code>
参数。
<code>RegisterAuthProvider</code>
应该通过具有 <code>register</code>
方法的 <code>AuthQuery</code>
获得。(AuthQuery
详见下文。)
await auth.register(
EmailAndPasswordAuthQuery.register(
email: "test@email.com",
password: "12345678",
),
);
同样,使用 <code>auth.signIn</code>
进行登录。
必须传递 <code>SignInAuthProvider</code>
参数,并且应该通过具有 <code>signIn</code>
方法的 <code>AuthQuery</code>
获得。
await auth.signIn(
EmailAndPasswordAuthQuery.signIn(
email: "test@email.com",
password: "12345678",
),
);
使用 <code>auth.confirmSignIn</code>
来确认认证,例如进行邮件链接认证或短信认证。
await auth.confirmSignIn(
SmsAuthQuery.confirmSignIn(
code: "012345",
),
);
更改用户信息
使用 <code>auth.change</code>
来更改用户信息。
必须传递 <code>ChangeAuthProvider</code>
参数,但根据要更改的内容,AuthQuery
方法可能不同。
<code>EmailAndPasswordAuthQuery.changeEmail</code>
:更改电子邮件地址。<code>EmailAndPasswordAuthQuery.changePassword</code>
:更改密码。<code>SmsAuthQuery.changePhoneNumber</code>
:更改电话号码。
await auth.change(
EmailAndPasswordAuthQuery.changeEmail(
email: "changed@email.com"
),
);
(仅在登录后可用。)
注销
使用 <code>auth.signOut</code>
进行注销。
仅在登录后可用,无需参数。
await auth.signOut();
更多关于Flutter Firebase认证插件katana_auth_firebase的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Firebase认证插件katana_auth_firebase的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用katana_auth_firebase
插件进行Firebase认证的代码示例。这个插件可能是一个自定义或第三方库,用于简化Firebase认证流程。假设你已经设置好了Firebase项目并获取了相关的配置信息,下面是如何在Flutter项目中集成并使用katana_auth_firebase
进行用户认证的示例代码。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加katana_auth_firebase
依赖(假设它已经在pub.dev上发布,或者你需要使用本地路径或Git仓库):
dependencies:
flutter:
sdk: flutter
katana_auth_firebase: ^x.y.z # 替换为实际的版本号
firebase_core: ^x.y.z # 确保也添加了firebase_core
firebase_auth: ^x.y.z # 确保也添加了firebase_auth,因为底层认证功能依赖于它
2. 配置Firebase
确保你的android/app/google-services.json
和ios/Runner/GoogleService-Info.plist
文件已经配置好,并且你的Firebase项目已经正确设置。
3. 初始化Firebase和Katana Auth
在你的Flutter应用的入口文件(通常是main.dart
)中初始化Firebase和Katana Auth:
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:katana_auth_firebase/katana_auth_firebase.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化Firebase
await Firebase.initializeApp();
// 初始化Katana Auth(假设有一个初始化方法)
await KatanaAuthFirebase.initialize();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: AuthenticationScreen(),
);
}
}
4. 使用Katana Auth进行用户认证
创建一个认证屏幕AuthenticationScreen
,其中包含登录和注册功能:
import 'package:flutter/material.dart';
import 'package:katana_auth_firebase/katana_auth_firebase.dart';
class AuthenticationScreen extends StatefulWidget {
@override
_AuthenticationScreenState createState() => _AuthenticationScreenState();
}
class _AuthenticationScreenState extends State<AuthenticationScreen> {
final _formKey = GlobalKey<FormState>();
String _email = '';
String _password = '';
void _submit() async {
if (_formKey.currentState!.validate()) {
_formKey.currentState!.save();
try {
// 假设KatanaAuthFirebase有一个signUpWithEmailAndPassword方法
await KatanaAuthFirebase.signUpWithEmailAndPassword(email: _email, password: _password);
print('User signed up successfully');
} catch (e) {
print('Error signing up: $e');
}
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Authentication'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
TextFormField(
decoration: InputDecoration(labelText: 'Email'),
validator: (value) {
if (value == null || value.isEmpty || !value.contains('@')) {
return 'Please enter a valid email address.';
}
return null;
},
onSaved: (value) {
_email = value!;
},
),
TextFormField(
decoration: InputDecoration(labelText: 'Password'),
obscureText: true,
validator: (value) {
if (value == null || value.isEmpty || value.length < 6) {
return 'Password must be at least 6 characters long.';
}
return null;
},
onSaved: (value) {
_password = value!;
},
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _submit,
child: Text('Sign Up'),
),
],
),
),
),
);
}
}
注意
- 上面的代码是一个简化的示例,实际使用中
katana_auth_firebase
插件可能有不同的API和方法名称。 - 你需要查阅
katana_auth_firebase
的官方文档或源代码,以了解具体的API和用法。 - 确保你已经正确配置了Firebase项目,并且已经添加了所有必要的依赖项。
- 如果
katana_auth_firebase
不是一个公开的库,你可能需要按照库作者的指示进行配置和使用。
希望这个示例能帮助你开始使用katana_auth_firebase
进行Firebase认证。如果有任何问题或需要进一步的帮助,请查阅相关文档或联系库作者。