Flutter身份验证与会话管理插件supertokens_flutter的使用
Flutter身份验证与会话管理插件supertokens_flutter的使用
关于
这是一个用纯 Dart 编写的 Flutter SDK,用于维护一个 Flutter 应用程序的 SuperTokens 会话。
了解更多,请访问 https://supertokens.com。
使用
初始化SDK
import 'package:supertokens_flutter/supertokens.dart';
// 在应用启动时初始化SDK
void main() {
SuperTokens.init(apiDomain: "http://localhost:3001");
}
检查会话是否存在
import 'package:supertokens_flutter/supertokens.dart';
Future<bool> doesSessionExist() async {
return await SuperTokens.doesSessionExist();
}
使用 http
进行网络请求
发起网络请求
你可以像平常一样使用 http
发起请求,唯一的不同是你需要从 supertokens
包中导入客户端。
// 从SuperTokens包中导入http客户端
import 'package:supertokens_flutter/http.dart' as http;
Future<void> makeRequest() async {
Uri uri = Uri.parse("http://localhost:3001/api");
var response = await http.get(uri);
// 处理响应
}
SuperTokens SDK 将自动处理会话过期和自动刷新。当你调用认证API(如登录或注册)时,SDK 会自动捕获头部中的访问令牌和刷新令牌并保存它们。
使用自定义 http
客户端
如果你使用自定义的 http
客户端并想使用 SuperTokens,只需将你的客户端提供给 SDK 即可。所有请求将继续使用你的客户端,并且 SuperTokens 提供的会话逻辑也会生效。
// 从SuperTokens包中导入http客户端
import 'package:supertokens_flutter/http.dart' as http;
Future<void> makeRequest() async {
Uri uri = Uri.parse("http://localhost:3001/api");
// 向SuperTokens提供你的自定义客户端
var httpClient = http.Client(client: customClient);
var response = await httpClient.get(uri);
// 处理响应
}
使用 Dio
进行网络请求
添加SuperTokens拦截器
你可以像平常一样使用 dio
发起请求。
import 'package:supertokens_flutter/dio.dart';
void setup() {
Dio dio = Dio(...);
dio.interceptors.add(SuperTokensInterceptorWrapper(client: dio));
}
或者使用实例方法:
import 'package:supertokens_flutter/dio.dart';
void setup() {
Dio dio = Dio(); // 创建一个Dio实例。
dio.addSupertokensInterceptor();
}
发起网络请求
import 'package:supertokens_flutter/dio.dart';
void setup() {
Dio dio = Dio(...);
dio.interceptors.add(SuperTokensInterceptorWrapper(client: dio));
var response = await dio.get("http://localhost:3001/api");
// 处理响应
}
注销
import 'package:supertokens_flutter/supertokens.dart';
Future<void> signOut() async {
await SuperTokens.signOut();
}
获取用户ID
import 'package:supertokens_flutter/supertokens.dart';
Future<String> getUserId() async {
return await SuperTokens.getUserId();
}
手动刷新会话
import 'package:supertokens_flutter/supertokens.dart';
Future<void> manualRefresh() async {
// 如果会话被刷新返回true,如果会话已过期返回false
var success = await SuperTokens.attemptRefreshingSession();
}
更多关于Flutter身份验证与会话管理插件supertokens_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter身份验证与会话管理插件supertokens_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter应用中使用supertokens_flutter
插件进行身份验证与会话管理的代码示例。这个示例将展示如何初始化Supertokens、进行用户登录和注销以及检查用户会话状态。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加supertokens_flutter
依赖:
dependencies:
flutter:
sdk: flutter
supertokens_flutter: ^x.y.z # 替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 配置Supertokens
在你的Flutter应用的入口文件(通常是main.dart
)中,配置Supertokens:
import 'package:flutter/material.dart';
import 'package:supertokens_flutter/supertokens_flutter.dart';
void main() {
// 配置Supertokens
Supertokens.init({
apiKey: "YOUR_API_KEY", // 替换为你的Supertokens API Key
websiteDomain: "YOUR_WEBSITE_DOMAIN", // 替换为你的网站域名
});
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
3. 用户登录
创建一个登录屏幕,让用户可以输入凭据并提交进行登录:
import 'package:flutter/material.dart';
import 'package:supertokens_flutter/supertokens_flutter.dart';
class LoginScreen extends StatefulWidget {
@override
_LoginScreenState createState() => _LoginScreenState();
}
class _LoginScreenState extends State<LoginScreen> {
final _formKey = GlobalKey<FormState>();
String _email = '';
String _password = '';
void _submit() async {
if (_formKey.currentState!.validate()) {
_formKey.currentState!.save();
try {
await Supertokens.signIn({
email: _email,
password: _password,
});
// 登录成功,跳转到主页
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => HomeScreen()),
);
} catch (e) {
// 处理登录错误
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('登录失败: ${e.message}')),
);
}
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('登录'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
children: <Widget>[
TextFormField(
decoration: InputDecoration(labelText: 'Email'),
validator: (value) {
if (value == null || value.isEmpty) {
return '请输入Email';
}
return null;
},
onSaved: (value) {
_email = value!;
},
),
TextFormField(
decoration: InputDecoration(labelText: '密码'),
validator: (value) {
if (value == null || value.isEmpty) {
return '请输入密码';
}
return null;
},
obscureText: true,
onSaved: (value) {
_password = value!;
},
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _submit,
child: Text('登录'),
),
],
),
),
),
);
}
}
4. 检查用户会话状态
在主页中,你可以检查用户会话状态,并显示相应的内容:
import 'package:flutter/material.dart';
import 'package:supertokens_flutter/supertokens_flutter.dart';
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
bool? _isUserLoggedIn;
@override
void initState() {
super.initState();
// 检查用户会话状态
Supertokens.getCurrentUser().then((user) {
setState(() {
_isUserLoggedIn = user != null;
});
});
}
void _logout() async {
await Supertokens.signOut();
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => LoginScreen()),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('主页'),
),
body: Center(
child: _isUserLoggedIn == null
? CircularProgressIndicator()
: _isUserLoggedIn!
? Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('欢迎回来!'),
SizedBox(height: 20),
ElevatedButton(
onPressed: _logout,
child: Text('注销'),
),
],
)
: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('你未登录'),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => LoginScreen()),
);
},
child: Text('登录'),
),
],
),
),
);
}
}
总结
这个示例展示了如何在Flutter应用中使用supertokens_flutter
插件进行基本的身份验证和会话管理。你可以根据需求进一步扩展和定制这些功能。