我正在使用AmazonuCognitouIdentityuDartu2处理我的Flatter应用程序中的身份验证。我通过电子邮件完成了身份验证。现在我还想完成Google身份验证,我正在遵循软件包文档中的用例19,但我遇到了一个错误。它没有加载谷歌的登录页面。我添加了cognitouPooluURL(us-east-1u XXXXXXXX)和**cognitouClientuID**(xxxxxxxxxxxxxxxxxxxxxx),它在URL中仍然不能正常工作。我错过了什么
附件:我正在使用geTx进行状态管理
它在移动设备上显示的内容:
运行URL时在web上显示的内容:
如何调用函数:
GestureDetector(
onTap: () async {
Get.to(
() => Scaffold(
appBar: AppBar(),
body: controller.getWebView(),
),
);
},
文件:
用例19。将此库与cognito在移动设备上的联合登录一起使用。使用flatteruwebview()导航到cognito的授权URL。使用flatteruWebView的navigationdelegate捕获myapp://?代码重定向=。向cognito的令牌URL发出post请求以获取您的令牌。使用令牌创建会话和用户
final Completer _webViewController = Completer();
Widget getWebView() {
var url = "https://${COGNITO_POOL_URL}" +
".amazoncognito.com/oauth2/authorize?identity_provider=Google&redirect_uri=" +
"myapp://&response_type=CODE&client_id=${COGNITO_CLIENT_ID}" +
"&scope=email%20openid%20profile%20aws.cognito.signin.user.admin";
return
WebView(
initialUrl: url,
userAgent: 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) ' +
'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Mobile Safari/537.36',
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) {
_webViewController.complete(webViewController);
},
navigationDelegate: (NavigationRequest request) {
if (request.url.startsWith("myapp://?code=")) {
String code = request.url.substring("myapp://?code=".length);
signUserInWithAuthCode(code);
return NavigationDecision.prevent;
}
return NavigationDecision.navigate;
},
gestureNavigationEnabled: true,
);
}
final userPool = CognitoUserPool(
'ap-southeast-1_xxxxxxxxx',
'xxxxxxxxxxxxxxxxxxxxxxxxxx'
);
static Future signUserInWithAuthCode(String authCode) async {
String url = "https://${COGNITO_POOL_URL}" +
".amazoncognito.com/oauth2/token?grant_type=authorization_code&client_id=" +
"${COGNITO_CLIENT_ID}&code=" + authCode + "&redirect_uri=myapp://";
final response = await http.post(url, body: {}, headers: {'Content-Type': 'application/x-www-form-urlencoded'});
if (response.statusCode != 200) {
throw Exception("Received bad status code from Cognito for auth code:" +
response.statusCode.toString() + "; body: " + response.body);
}
final tokenData = json.decode(response.body);
final idToken = CognitoIdToken(tokenData['id_token']);
final accessToken = CognitoAccessToken(tokenData['access_token']);
final refreshToken = CognitoRefreshToken(tokenData['refresh_token']);
final session = CognitoUserSession(idToken, accessToken, refreshToken: refreshToken);
final user = CognitoUser(null, userPool, signInUserSession: session);
// NOTE: in order to get the email from the list of user attributes, make sure you select email in the list of
// attributes in Cognito and map it to the email field in the identity provider.
final attributes = await user.getUserAttributes();
for (CognitoUserAttribute attribute in attributes) {
if (attribute.getName() == "email") {
user.username = attribute.getValue();
break;
}
}
return user;
}
}
附件:我正在使用相同的代码填充请求的动态var-s
© 版权声明
本站下载的源码均来自公开网络收集转发二次开发而来,
若侵犯了您的合法权益,请来信通知我们1413333033@qq.com,
我们会及时删除,给您带来的不便,我们深表歉意。
下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,访问及下载者下载默认同意本站声明的免责申明,请合理使用切勿商用。
THE END
暂无评论内容