Flutter身份验证插件flutter_auth_provider的使用
Flutter身份验证插件flutter_auth_provider的使用
flutter_auth_provider
是一个用于构建 Flutter 应用的身份验证管理器。它提供了简单且可扩展的方式来处理用户认证相关的逻辑。
开始使用
步骤
-
添加依赖: 将
flutter_auth_provider
添加到你的pubspec.yaml
文件中。dependencies: flutter_auth_provider: ^x.y.z flutter_secure_storage: ^x.y.z
-
实现存储类: 实现
AuthStore
和TokenStore
来处理用户数据和令牌的持久化。 -
将存储类连接到视图: 使用
Provider
将存储类连接到应用的视图。
概念
1. 存储类(Stores)
存储类允许你实现自定义的数据持久化层,用于处理认证相关的数据。
-
AuthStore:这是用户相关数据的存储。当你实现
AuthStore
时,你可以使用一个自定义的类型作为User
的泛型。 -
TokenStore:实现如何存储和刷新令牌。
示例实现:
import 'package:flutter_auth_provider/flutter_auth_provider.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
class User {
String userName;
String role;
const User({required this.role, required this.userName});
}
const String userNameKey = 'userName';
const String roleKey = 'role';
const String tokenKey = 'token';
const String refreshTokenKey = 'refreshToken';
class SecureStore implements AuthStore<User>, TokenStore {
static SecureStore _instance = const SecureStore._();
final FlutterSecureStorage _storage = const FlutterSecureStorage();
const SecureStore._();
factory SecureStore() => _instance;
[@override](/user/override)
Future<void> delete() async {
await _storage.delete(key: userNameKey);
await _storage.delete(key: roleKey);
}
[@override](/user/override)
Future<User?> retrieve() async {
final userName = await _storage.read(key: userNameKey);
final role = await _storage.read(key: roleKey);
if (userName != null && role != null) {
return User(userName: userName, role: role);
}
return null;
}
[@override](/user/override)
Future<void> save(User user) async {
await _storage.write(key: userNameKey, value: user.userName);
await _storage.write(key: roleKey, value: user.role);
}
[@override](/user/override)
Future<void> clear() async {
await _storage.delete(key: tokenKey);
await _storage.delete(key: refreshTokenKey);
}
[@override](/user/override)
Future<String?> getRefreshToken() async {
return _storage.read(key: refreshTokenKey);
}
[@override](/user/override)
Future<String?> getToken() async {
return _storage.read(key: tokenKey);
}
[@override](/user/override)
Future<void> saveTokens({required String token, String? refreshToken}) async {
await _storage.write(key: tokenKey, value: token);
if (refreshToken != null) {
await _storage.write(key: refreshTokenKey, value: refreshToken);
}
}
}
2. 监听器(Listeners)
有两个监听器可以执行与认证事件相关的代码。
- LoginListener:当用户登录时调用。
- LogoutListener:当用户注销时调用。
示例:
class MyLoginListener extends LoginListener {
[@override](/user/override)
void onLoginSuccess(User user) {
// 用户登录成功后的操作
}
[@override](/user/override)
void onLoginFailure(AuthException exception) {
// 用户登录失败后的操作
}
}
完整示例
main.dart
import 'package:flutter/material.dart';
import 'package:flutter_auth_provider/flutter_auth_provider.dart';
import 'package:flutter_auth_provider_example/auth/secure_store.dart';
import 'package:flutter_auth_provider_example/auth/type_def.dart';
import 'package:flutter_auth_provider_example/auth/user.dart';
import 'package:flutter_auth_provider_example/auth_app.dart';
import 'package:flutter_auth_provider_example/unauth_app.dart';
import 'package:provider/provider.dart';
void main() {
runApp(
AuthProvider<User>(
store: SecureStore(),
child: const MyApp(),
),
);
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
final bool isAuthenticated = context.watch<MyAuthManager>().isLoggedIn;
if (isAuthenticated) {
return const AuthenticatedApp();
} else {
return const UnAuthenticatedApp();
}
}
}
更多关于Flutter身份验证插件flutter_auth_provider的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter身份验证插件flutter_auth_provider的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用 flutter_auth_provider
插件进行身份验证的示例代码。这个插件通常用于处理各种身份验证服务,比如 Firebase Authentication、Google Sign-In、Apple Sign-In 等。
首先,确保你已经在 pubspec.yaml
文件中添加了 flutter_auth_provider
依赖:
dependencies:
flutter:
sdk: flutter
flutter_auth_provider: ^最新版本号 # 替换为实际的最新版本号
然后运行 flutter pub get
来获取依赖。
接下来,我们将展示如何使用 flutter_auth_provider
进行基本的 Google Sign-In 身份验证。这只是一个示例,具体实现可能需要根据你使用的身份验证服务进行调整。
1. 配置 Google Sign-In
在你的 android/app/src/main/AndroidManifest.xml
文件中添加以下权限和配置:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<!-- 其他配置 -->
<application
<!-- 其他配置 -->
<!-- 添加 Google Sign-In 配置 -->
<meta-data
android:name="com.google.android.gms.client.measurement.enabled"
android:value="false" />
<meta-data
android:name="com.google.android.gms.auth.api.signin.REVISED_APP_CLIENT_ID"
android:value="你的客户端ID.apps.googleusercontent.com" />
</application>
<!-- 添加互联网权限 -->
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
2. 配置 iOS 项目(如果需要)
对于 iOS 项目,你需要通过 Xcode 配置 Google Sign-In。具体步骤可以参考 Google 的官方文档。
3. 使用 flutter_auth_provider
进行身份验证
在你的 Flutter 项目中,创建一个新的 Dart 文件(例如 auth_service.dart
)来处理身份验证逻辑:
import 'package:flutter/material.dart';
import 'package:flutter_auth_provider/flutter_auth_provider.dart';
class AuthService {
final FlutterAuthProvider _authProvider = FlutterAuthProvider();
Future<void> signInWithGoogle() async {
try {
// 触发 Google Sign-In
final result = await _authProvider.signInWithGoogle();
// 处理结果
if (result.isSuccessful) {
// 用户成功登录
print('User signed in with Google: ${result.user?.email}');
} else {
// 登录失败
print('Google Sign-In failed: ${result.errorMessage}');
}
} catch (e) {
// 捕获任何异常
print('An error occurred: $e');
}
}
Future<void> signOut() async {
try {
// 触发登出
await _authProvider.signOut();
print('User signed out');
} catch (e) {
// 捕获任何异常
print('An error occurred while signing out: $e');
}
}
}
4. 在你的应用中使用 AuthService
在你的主应用文件(例如 main.dart
)中使用 AuthService
:
import 'package:flutter/material.dart';
import 'auth_service.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
final AuthService _authService = AuthService();
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Auth Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Auth Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () {
_authService.signInWithGoogle();
},
child: Text('Sign in with Google'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
_authService.signOut();
},
child: Text('Sign out'),
),
],
),
),
),
);
}
}
这个示例展示了如何使用 flutter_auth_provider
插件进行 Google Sign-In 身份验证。你可以根据插件的文档和其他身份验证服务的需求,扩展和修改这个示例。注意,实际项目中还需要处理更多的错误情况、用户状态管理等。