Flutter身份验证与令牌管理插件flueco_auth_token的使用

Flutter身份验证与令牌管理插件flueco_auth_token的使用

安装

首先,在你的 pubspec.yaml 文件中添加 flueco_auth_token 插件,并指定其版本号:

dependencies:
  flueco_auth_token: {version}

保存后运行 flutter pub get 来安装该插件。

使用示例

初始化插件

在使用之前,你需要初始化 flueco_auth_token 插件。这通常在应用启动时进行。

import 'package:flutter/material.dart';
import 'package:flueco_auth_token/flueco_auth_token.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Flueco Auth Token Demo')),
        body: Center(child: AuthWidget()),
      ),
    );
  }
}

class AuthWidget extends StatefulWidget {
  [@override](/user/override)
  _AuthWidgetState createState() => _AuthWidgetState();
}

class _AuthWidgetState extends State<AuthWidget> {
  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化插件
    FluecoAuthToken.init();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container();
  }
}

登录用户

接下来,实现一个登录功能。假设你有一个简单的登录表单,用户可以输入用户名和密码。

import 'package:flutter/material.dart';
import 'package:flueco_auth_token/flueco_auth_token.dart';

class LoginPage extends StatefulWidget {
  [@override](/user/override)
  _LoginPageState createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {
  final _formKey = GlobalKey<FormState>();
  String _username;
  String _password;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Login')),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            children: [
              TextFormField(
                decoration: InputDecoration(labelText: 'Username'),
                onSaved: (value) => _username = value,
              ),
              TextFormField(
                obscureText: true,
                decoration: InputDecoration(labelText: 'Password'),
                onSaved: (value) => _password = value,
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () async {
                  if (_formKey.currentState.validate()) {
                    _formKey.currentState.save();
                    try {
                      // 调用插件的登录方法
                      await FluecoAuthToken.login(_username, _password);
                      print('登录成功');
                    } catch (e) {
                      print('登录失败: $e');
                    }
                  }
                },
                child: Text('Login'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

获取当前用户信息

登录成功后,你可以通过以下方式获取当前用户的认证信息:

import 'package:flutter/material.dart';
import 'package:flueco_auth_token/flueco_auth_token.dart';

class UserInfoPage extends StatefulWidget {
  [@override](/user/override)
  _UserInfoPageState createState() => _UserInfoPageState();
}

class _UserInfoPageState extends State<UserInfoPage> {
  Map<String, dynamic> _userInfo;

  [@override](/user/override)
  void initState() {
    super.initState();
    // 获取当前用户信息
    _getUserInfo();
  }

  Future<void> _getUserInfo() async {
    try {
      _userInfo = await FluecoAuthToken.getUserInfo();
      setState(() {});
    } catch (e) {
      print('获取用户信息失败: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('User Info')),
      body: _userInfo != null
          ? Padding(
              padding: const EdgeInsets.all(16.0),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Text('Username: ${_userInfo['username']}'),
                  Text('Token: ${_userInfo['token']}'),
                ],
              ),
            )
          : Center(child: CircularProgressIndicator()),
    );
  }
}

更多关于Flutter身份验证与令牌管理插件flueco_auth_token的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter身份验证与令牌管理插件flueco_auth_token的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flueco_auth_token 是一个用于 Flutter 应用的身份验证和令牌管理的插件。它可以帮助开发者轻松地处理用户身份验证、令牌存储、刷新令牌等操作。以下是如何使用 flueco_auth_token 插件的基本步骤:

1. 安装插件

首先,你需要在 pubspec.yaml 文件中添加 flueco_auth_token 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  flueco_auth_token: ^1.0.0 # 请使用最新版本

然后运行 flutter pub get 命令来安装插件。

2. 初始化插件

在你的应用的 main.dart 文件中,初始化 flueco_auth_token 插件:

import 'package:flueco_auth_token/flueco_auth_token.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化插件
  await FluecoAuthToken.initialize(
    baseUrl: 'https://your-api-endpoint.com', // 你的 API 基础 URL
    tokenStorage: SecureTokenStorage(), // 使用安全存储来存储令牌
    tokenRefreshHandler: _refreshToken, // 令牌刷新处理函数
  );

  runApp(MyApp());
}

// 令牌刷新处理函数
Future<void> _refreshToken() async {
  // 在这里实现令牌刷新的逻辑
  // 例如:调用 API 刷新令牌并返回新的令牌
}

3. 用户登录和令牌存储

在用户登录成功后,使用 FluecoAuthToken 来存储令牌:

void login(String username, String password) async {
  // 调用 API 进行登录
  final response = await http.post(
    Uri.parse('https://your-api-endpoint.com/login'),
    body: {'username': username, 'password': password},
  );

  if (response.statusCode == 200) {
    final responseData = json.decode(response.body);
    final accessToken = responseData['access_token'];
    final refreshToken = responseData['refresh_token'];

    // 存储令牌
    await FluecoAuthToken.storeTokens(
      accessToken: accessToken,
      refreshToken: refreshToken,
    );
  } else {
    // 处理登录失败的情况
  }
}

4. 使用令牌进行 API 请求

在进行需要身份验证的 API 请求时,使用 FluecoAuthToken 获取存储在应用中的令牌:

void fetchUserData() async {
  // 获取访问令牌
  final accessToken = await FluecoAuthToken.getAccessToken();

  if (accessToken != null) {
    // 使用令牌进行 API 请求
    final response = await http.get(
      Uri.parse('https://your-api-endpoint.com/user'),
      headers: {'Authorization': 'Bearer $accessToken'},
    );

    if (response.statusCode == 200) {
      // 处理成功响应
    } else {
      // 处理失败响应
    }
  } else {
    // 处理没有令牌的情况
  }
}

5. 令牌刷新

当访问令牌过期时,使用 FluecoAuthToken 自动刷新令牌:

void fetchUserDataWithRefresh() async {
  try {
    // 获取访问令牌,如果过期会自动刷新
    final accessToken = await FluecoAuthToken.getAccessToken();

    if (accessToken != null) {
      // 使用令牌进行 API 请求
      final response = await http.get(
        Uri.parse('https://your-api-endpoint.com/user'),
        headers: {'Authorization': 'Bearer $accessToken'},
      );

      if (response.statusCode == 200) {
        // 处理成功响应
      } else {
        // 处理失败响应
      }
    } else {
      // 处理没有令牌的情况
    }
  } catch (e) {
    // 处理令牌刷新失败的异常
  }
}

6. 用户注销

在用户注销时,清除存储的令牌:

void logout() async {
  await FluecoAuthToken.clearTokens();
  // 其他注销逻辑
}

7. 处理令牌失效

在某些情况下,令牌可能会失效(例如被服务器撤销)。你可以监听令牌失效事件并进行处理:

void listenForTokenInvalidation() {
  FluecoAuthToken.onTokenInvalidated.listen((_) {
    // 令牌失效,执行相应操作,例如强制用户重新登录
    logout();
  });
}
回到顶部