Flutter认证中间件插件authmiddleware的使用

Flutter认证中间件插件authmiddleware的使用

AuthMiddleware 是由 Launchlense 开发的一个 Flutter 包,用于处理认证中间件操作。它提供了初始化认证、执行登录操作、验证认证状态以及通过装饰器模式授权用户的实用工具。

安装

在你的 Flutter 项目中使用 AuthMiddleware,请在 pubspec.yaml 文件中添加以下依赖:

dependencies:
  authmiddleware:1.0.2

然后运行 flutter pub get 来安装该包。

使用

首先,在 Dart 文件中导入该包:

import 'package:authmiddleware/authmiddleware.dart';

获取访问密钥

前往 https://portal.amw.launchlense.tech

  1. 创建账户。
  2. 创建一个新项目。
  3. 你会收到一个访问令牌(请勿丢失该令牌)。

初始化 AuthMiddleware

使用访问密钥初始化 AuthMiddleware 服务:

final authMiddleware = AuthMiddlewareService();
await authMiddleware.initAuthMiddleWare('your_access_key');

初始化登录

使用手机号和 OTP 进行登录:

authMiddleware.initLogin(
  '9999999999', // 手机号
  LoginTypes.otp, // 登录类型为OTP
  otpLength: 4, // OTP长度为4
  (response) { // 成功回调
    print('Login successful: $response');
  },
  (error) { // 失败回调
    print('Login error: $error');
  },
);

验证认证状态

验证用户是否已认证:

authMiddleware.verifyAuth(
  '9999999999', // 手机号
  '1234', // OTP验证码
  (response) { // 成功回调
    print('Authentication successful: $response');
  },
  (error) { // 失败回调
    print('Authentication error: $error');
  },
);

使用装饰器授权用户

你可以使用 authorizeUser 方法作为装饰器来确保在执行函数之前用户已授权:

authMiddleware.authorizeUser(
  (authorize, onError) async {
    authorize( // 授权成功回调
      (response) {
        print('Authorization successful: $response');
      },
      (error) { // 授权失败回调
        print('Authorization error: $error');
      },
    );
    // 在这里调用需要授权的任何函数
  },
);

更多关于Flutter认证中间件插件authmiddleware的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter认证中间件插件authmiddleware的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,中间件(Middleware)通常用于在路由导航过程中执行某些操作,例如验证用户是否已登录、权限检查等。auth_middleware 是一个常见的中间件插件,用于在导航到特定页面之前验证用户的认证状态。

虽然 Flutter 本身并没有一个官方的 auth_middleware 插件,但你可以使用一些流行的状态管理库(如 ProviderRiverpodBloc 等)和路由管理库(如 go_routerauto_route 等)来实现认证中间件的功能。

以下是一个使用 go_routerProvider 实现认证中间件的示例:

1. 安装依赖

首先,确保你已经在 pubspec.yaml 文件中添加了 go_routerprovider 依赖:

dependencies:
  flutter:
    sdk: flutter
  go_router: ^5.0.0
  provider: ^6.0.0

2. 创建认证状态管理类

使用 Provider 来管理用户的认证状态:

import 'package:flutter/material.dart';

class AuthProvider extends ChangeNotifier {
  bool _isAuthenticated = false;

  bool get isAuthenticated => _isAuthenticated;

  void login() {
    _isAuthenticated = true;
    notifyListeners();
  }

  void logout() {
    _isAuthenticated = false;
    notifyListeners();
  }
}

3. 配置路由

使用 go_router 配置路由,并在路由中添加认证中间件:

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';

import 'auth_provider.dart';

void main() {
  runApp(
    ChangeNotifierProvider(
      create: (_) => AuthProvider(),
      child: MyApp(),
    ),
  );
}

class MyApp extends StatelessWidget {
  MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp.router(
      routerConfig: _router,
    );
  }

  final GoRouter _router = GoRouter(
    routes: [
      GoRoute(
        path: '/',
        builder: (context, state) => HomeScreen(),
      ),
      GoRoute(
        path: '/login',
        builder: (context, state) => LoginScreen(),
      ),
      GoRoute(
        path: '/profile',
        builder: (context, state) => ProfileScreen(),
      ),
    ],
    redirect: (context, state) {
      final authProvider = Provider.of<AuthProvider>(context, listen: false);
      final isLoggedIn = authProvider.isAuthenticated;
      final isLoggingIn = state.location == '/login';

      if (!isLoggedIn && !isLoggingIn) {
        return '/login';
      }

      if (isLoggedIn && isLoggingIn) {
        return '/';
      }

      return null;
    },
  );
}

class HomeScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Home')),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            context.go('/profile');
          },
          child: Text('Go to Profile'),
        ),
      ),
    );
  }
}

class LoginScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Login')),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Provider.of<AuthProvider>(context, listen: false).login();
            context.go('/');
          },
          child: Text('Login'),
        ),
      ),
    );
  }
}

class ProfileScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Profile')),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Provider.of<AuthProvider>(context, listen: false).logout();
            context.go('/');
          },
          child: Text('Logout'),
        ),
      ),
    );
  }
}
回到顶部