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,你能解释一下为什么这不起作用以及我如何解决它吗?
尝试这种方法
final CognitoAuthSession? result = await Amplify.Auth.getAuthSession();
final String token = result.userPoolTokensResult.value.accessToken.raw;