You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中获取AWS Cognito用户组以实现视图分流?

在Flutter中获取AWS Cognito用户组的方法

要实现根据Cognito用户组跳转视图的需求,你可以通过AWS Amplify Flutter库来获取用户的组信息,具体步骤如下:

1. 确保依赖配置正确

首先确认项目中已引入amplify_flutter和amplify_auth_cognito依赖,在pubspec.yaml中添加:

dependencies:
  amplify_flutter: ^1.0.0
  amplify_auth_cognito: ^1.0.0

(版本号请根据当前最新稳定版调整)

2. 获取认证用户的会话信息

用户完成认证后,通过Amplify Auth模块获取当前用户的会话,从中解析JWT Token的payload——Cognito用户组信息默认存储在cognito:groups字段中。

示例代码:

import 'package:amplify_flutter/amplify_flutter.dart';
import 'package:amplify_auth_cognito/amplify_auth_cognito.dart';
import 'dart:convert';
import 'dart:typed_data';
import 'dart:convert';

Future<List<String>?> getUserGroups() async {
  try {
    // 获取当前认证用户
    final user = await Amplify.Auth.getCurrentUser();
    
    // 获取用户会话
    final session = await Amplify.Auth.fetchAuthSession(
      options: CognitoSessionOptions(getAWSCredentials: true),
    );
    
    // 解析ID Token的payload
    if (session is CognitoAuthSession) {
      final idToken = session.userPoolTokens?.idToken;
      if (idToken != null) {
        // 解码JWT Token
        final payload = parseJwt(idToken);
        // 提取用户组
        return List<String>.from(payload['cognito:groups'] ?? []);
      }
    }
    return null;
  } on AuthException catch (e) {
    print('获取用户组失败: ${e.message}');
    return null;
  }
}

// 辅助函数:解码JWT Token
Map<String, dynamic> parseJwt(String token) {
  final parts = token.split('.');
  if (parts.length != 3) {
    throw Exception('无效的JWT Token');
  }

  final payload = parts[1];
  final normalized = base64Url.normalize(payload);
  final decoded = utf8.decode(base64Url.decode(normalized));
  return jsonDecode(decoded);
}

3. 根据用户组判断跳转视图

在用户认证成功后调用上述方法,根据返回的用户组列表判断是否包含ADMIN,进而跳转对应页面:

// 认证成功后执行的逻辑
final userGroups = await getUserGroups();
if (userGroups != null && userGroups.contains('ADMIN')) {
  // 跳转到管理员视图
  Navigator.pushReplacement(context, MaterialPageRoute(builder: (_) => AdminPage()));
} else {
  // 跳转到普通用户视图
  Navigator.pushReplacement(context, MaterialPageRoute(builder: (_) => UserPage()));
}

注意事项

  • 确保Cognito用户池配置中,已为用户正确分配ADMIN用户组
  • 处理用户未认证的异常情况,比如getCurrentUser抛出错误时,引导用户登录

内容的提问来源于stack exchange,提问作者Dhanuka Perera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:55:23