Flutter Firebase认证插件katana_auth_firebase的使用

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

Flutter Firebase认证插件katana_auth_firebase的使用

Masamune logo

Katana Auth

Follow on Twitter Follow on Threads Maintained with Melos

GitHub Sponsor


[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

1 回复

更多关于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.jsonios/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认证。如果有任何问题或需要进一步的帮助,请查阅相关文档或联系库作者。

回到顶部