Flutter身份验证插件stytch_dart_auth_sdk的使用
插件stytch_dart_auth_sdk概述
stytch_dart_auth_sdk 是一个用于在 Dart 或 Flutter 项目中实现身份验证的强大且灵活的工具集。它提供了 stytch 身份验证功能的 Dart 实现。
特性
- 用户管理: 提供一整套全面的用户管理功能,以无缝管理用户账户。
- 自定义令牌生成: 通过生成自定义令牌,将 stytch 身份验证与后端服务集成。
- 生成电子邮件操作链接: 创建并发送电子邮件操作链接给用户的邮箱,用于邮箱验证、密码重置等。
- ID 令牌验证: 安全地验证 ID 令牌,确保应用程序用户已认证并授权访问应用。
- 管理 SAML/OIDC 提供商配置: 管理和配置 SAML 和 OIDC 提供商,支持身份验证和简单的单点登录解决方案。
插件stytch_dart_auth_sdk入门指南
若要在您的 Flutter 项目中使用 stytch_dart_auth_sdk 实现 stytch 身份验证,请按照以下步骤设置 auth SDK:
- 确保您的系统已安装 Flutter 或 Dart (3.4.x) SDK。
- 设置 stytch 项目和服务账户。
- 设置 Flutter 项目。
安装
对于 Flutter 项目,使用以下命令安装插件:
flutter pub add stytch_dart_auth_sdk
您也可以手动编辑 pubspec.yaml
文件,添加以下内容:
dependencies:
stytch_dart_auth_sdk: ^0.0.1-pre+11
然后运行以下命令完成安装:
flutter pub get
注意: SDK 版本可能会有所不同。
使用方法
示例代码
import 'dart:io';
import 'package:bot_toast/bot_toast.dart';
import 'package:cognito/screens/splash_screen/splash_screen.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:stytch_dart_auth_sdk/stytch_dart_auth_sdk.dart'; // 导入 stytch_dart_auth_sdk
import 'package:flutter/services.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
try {
if (kIsWeb) {
// 在 Web 端初始化 stytch
debugPrint('Initializing stytch for Web...');
stytchApp.initializeAppWithEnvironmentVariables(
apiKey: 'YOUR-API-KEY', // 替换为您的 API 密钥
projectId: 'YOUR-PROJECT-ID', // 替换为您的项目 ID
bucketName: 'Your Bucket Name', // 替换为您的存储桶名称
);
debugPrint('stytch initialized for Web.');
} else {
if (Platform.isAndroid || Platform.isIOS) {
debugPrint('Initializing stytch for Mobile...');
// 加载服务账户 JSON 文件
String serviceAccountContent = await rootBundle.loadString(
'assets/service_account.json', // 替换为您实际的服务账户文件路径
);
debugPrint('Service account loaded.');
// 使用服务账户内容初始化 stytch
await stytchApp.initializeAppWithServiceAccount(
serviceAccountContent: serviceAccountContent,
);
debugPrint('stytch initialized for Mobile.');
}
}
// 获取 stytch Auth 实例
final auth = stytchApp.instance.getAuth();
debugPrint('stytch Auth instance obtained.');
runApp(const MyApp());
} catch (e, stackTrace) {
debugPrint('Error initializing stytch: $e');
debugPrint('StackTrace: $stackTrace');
}
}
详细说明
-
导入包
import 'package:stytch_dart_auth_sdk/stytch_dart_auth_sdk.dart';
将 stytch_dart_auth_sdk 包导入到您的 Dart 或 Flutter 项目中。
-
Web 初始化
stytchApp.initializeAppWithEnvironmentVariables( apiKey: 'YOUR-API-KEY', projectId: 'YOUR-PROJECT-ID', bucketName: 'Your Bucket Name', );
对于 Flutter Web,使用环境变量初始化 stytch。
-
移动设备初始化
- 加载服务账户 JSON 文件:
String serviceAccountContent = await rootBundle.loadString( 'assets/service_account.json', );
- 使用服务账户内容初始化:
await stytchApp.initializeAppWithServiceAccount( serviceAccountContent: serviceAccountContent, );
- 加载服务账户 JSON 文件:
-
获取 Auth 实例
final auth = stytchApp.instance.getAuth();
更多关于Flutter身份验证插件stytch_dart_auth_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
stytch_dart_auth_sdk
是一个用于在 Flutter 应用中实现身份验证的插件,它基于 Stytch 的身份验证服务。Stytch 提供了一套强大的身份验证解决方案,包括密码、OAuth、Magic Links、OTP 等多种身份验证方式。
以下是如何在 Flutter 项目中使用 stytch_dart_auth_sdk
的基本步骤:
1. 安装依赖
首先,你需要在 pubspec.yaml
文件中添加 stytch_dart_auth_sdk
依赖:
dependencies:
flutter:
sdk: flutter
stytch_dart_auth_sdk: ^0.0.1 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化 SDK
在你的 Flutter 应用中,首先需要初始化 Stytch SDK。通常你可以在 main.dart
文件中进行初始化:
import 'package:stytch_dart_auth_sdk/stytch_dart_auth_sdk.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 Stytch SDK
await StytchAuth.initialize(
publicToken: 'YOUR_PUBLIC_TOKEN', // 你的 Stytch Public Token
environment: StytchEnvironment.live, // 或者 StytchEnvironment.test
);
runApp(MyApp());
}
3. 实现身份验证功能
3.1 使用 Magic Links 进行身份验证
Magic Links 是一种无密码登录方式,用户通过点击发送到其邮箱的链接进行登录。
import 'package:stytch_dart_auth_sdk/stytch_dart_auth_sdk.dart';
Future<void> sendMagicLink(String email) async {
try {
await StytchAuth.magicLinks.email.send(
email: email,
loginRedirectUrl: 'https://yourapp.com/login', // 登录成功后的重定向 URL
signupRedirectUrl: 'https://yourapp.com/signup', // 注册成功后的重定向 URL
);
print('Magic Link sent successfully');
} catch (e) {
print('Failed to send Magic Link: $e');
}
}
3.2 使用 OAuth 进行身份验证
OAuth 允许用户通过第三方服务(如 Google、Facebook 等)进行登录。
import 'package:stytch_dart_auth_sdk/stytch_dart_auth_sdk.dart';
Future<void> startOAuth(String provider) async {
try {
await StytchAuth.oauth.start(
provider: provider, // 例如 'google', 'facebook'
redirectUri: 'https://yourapp.com/oauth/callback', // 回调 URL
);
print('OAuth started successfully');
} catch (e) {
print('Failed to start OAuth: $e');
}
}
3.3 使用 OTP 进行身份验证
OTP(一次性密码)通常用于短信或邮箱验证。
import 'package:stytch_dart_auth_sdk/stytch_dart_auth_sdk.dart';
Future<void> sendOTP(String phoneNumber) async {
try {
await StytchAuth.otps.sms.send(
phoneNumber: phoneNumber,
);
print('OTP sent successfully');
} catch (e) {
print('Failed to send OTP: $e');
}
}
Future<void> verifyOTP(String code) async {
try {
await StytchAuth.otps.sms.verify(
code: code,
);
print('OTP verified successfully');
} catch (e) {
print('Failed to verify OTP: $e');
}
}
4. 处理用户会话
Stytch SDK 会自动管理用户会话。你可以通过以下方式检查用户是否已登录:
import 'package:stytch_dart_auth_sdk/stytch_dart_auth_sdk.dart';
Future<void> checkSession() async {
try {
final session = await StytchAuth.session.get();
if (session != null) {
print('User is logged in');
} else {
print('User is not logged in');
}
} catch (e) {
print('Failed to check session: $e');
}
}
5. 注销用户
你可以通过以下方式注销用户:
import 'package:stytch_dart_auth_sdk/stytch_dart_auth_sdk.dart';
Future<void> logout() async {
try {
await StytchAuth.session.revoke();
print('User logged out successfully');
} catch (e) {
print('Failed to logout: $e');
}
}
6. 处理回调
对于 Magic Links 和 OAuth,你需要在应用中处理回调。通常你可以在 MaterialApp
的 onGenerateRoute
或 onUnknownRoute
中处理这些回调。
import 'package:flutter/material.dart';
import 'package:stytch_dart_auth_sdk/stytch_dart_auth_sdk.dart';
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
onGenerateRoute: (settings) {
if (settings.name == '/login') {
// 处理 Magic Link 回调
final token = settings.arguments as String;
StytchAuth.magicLinks.authenticate(token: token);
} else if (settings.name == '/oauth/callback') {
// 处理 OAuth 回调
final token = settings.arguments as String;
StytchAuth.oauth.authenticate(token: token);
}
return null;
},
home: HomeScreen(),
);
}
}