无法从 flutter 中的 Amplify Auth 检索 JWT/访问令牌以用于 API 授权

问题描述 投票:0回答:1
import 'dart:async';
import 'package:amplify_auth_cognito/amplify_auth_cognito.dart';
import '../amplifyconfiguration.dart';
import 'package:amplify_flutter/amplify_flutter.dart';

class LogInService {
  LogInService() {
    _configureAmplify();
  }

  Future<void> _configureAmplify() async {
    try {
      AmplifyAuthCognito auth = AmplifyAuthCognito();
      await Amplify.addPlugin(auth);

      // call Amplify.configure to use the initialized categories in your app
      await Amplify.configure(amplifyconfig);
    } on Exception catch (e) {
      safePrint('An error occurred configuring Amplify: $e');
    }
  }

  Future<bool> signInWithWebUI() async {
    try {
      final result = await Amplify.Auth.signInWithWebUI();
      final creds = await Amplify.Auth.fetchAuthSession();
      safePrint('Sign in result: $creds');
      if (creds.isSignedIn) {
        fetchCognitoAuthSession();
        return true;
      }
      else {
        return false;
      }
    } on AuthException catch (e) {
      safePrint('Error signing in: ${e.message}');
      return false;
    }
  }

  Future<void> fetchCognitoAuthSession() async {
    try {
      final cognitoPlugin = Amplify.Auth.getPlugin(AmplifyAuthCognito.pluginKey);
      final result = await cognitoPlugin.fetchAuthSession();
      final accessToken = result.
      final identityId = result.identityIdResult.value;
      safePrint("Current user's identity ID: $identityId");
    } on AuthException catch (e) {
      safePrint('Error retrieving auth session: ${e.message}');
    }
  }

  Future<void> signOutWithWebUI() async {
    try {
      await Amplify.Auth.signOut();
      safePrint("Signed out successfully");
    } on AuthException catch (e) {
      safePrint(e.message);
    }
  }
}

用户成功登录后,我尝试访问identityId和JWT以用于

Future<void> fetchCognitoAuthSession()
中的API授权,但我只是得到
Error retrieving auth session: The AWS credentials could not be retrieved

使用

await Amplify.Auth.fetchAuthSession();
将返回以下消息
Sign in result: { I/flutter (11660):   "isSignedIn": true, I/flutter (11660):   "userSub": "AWSSuccessResult<String, AuthException> {\n  \"value\": \"<some value that is removed>\"\n}",       I/flutter (11660):   "userPoolTokens": "AWSSuccessResult<CognitoUserPoolTokens, AuthException> {\n  \"value\": {\n    \"signInMethod\": \"hostedUi\",\n    \"accessToken\": \" <some access token that is removed>

我的解决方案永远无法访问身份ID和JWT,你能解释一下为什么这不起作用以及我如何解决它吗?

flutter aws-amplify flutter-aws-amplify
1个回答
0
投票

尝试这种方法

final CognitoAuthSession? result = await Amplify.Auth.getAuthSession();
final String token = result.userPoolTokensResult.value.accessToken.raw;
© www.soinside.com 2019 - 2024. All rights reserved.