ios - AWSCognito Auth `getSession` 不会在 Swift 中触发回调
问题描述
我对 Swift 有点陌生,但我正在尝试将 AWSCognitoAuth 改编为 Capacitor 的 Swift 插件。我在这里创建了一个仓库:https ://github.com/Kikketer/CapacitorTest
最大的问题之一是在 iOS 项目中没有触发回调:
cognitoAuth.getSession(self.bridge.viewController) { (session, err) in
// this is never called after I click the "sign in" button in Cognito
if(err != nil) {
NSLog(err.debugDescription)
call.reject(err.debugDescription)
} else {
call.resolve([
"accessToken": session?.accessToken?.tokenString ?? ""])
}
}
通过我在自述文件中描述的所有设置,这是亮点:
- 我设置了 Cognito 用户池,添加了一个用户,并为它创建了一个应用页面
- 我带来了最新的 AWSCognito pod(截至目前为 2.9)
- 我为 Capacitor 编写了一个插件来弥补差距,但理论上 Capacitor 与此无关,因为它似乎纯粹是一个 Swift 和本机实现问题:https ://github.com/Kikketer/CapacitorTest/blob/master /ios/App/App/CognitoPlugin.swift#L12
- 当我单击应用程序中的“登录”按钮时,Cognito 在“特殊的 iOS 浏览器”中启动,但在我单击该浏览器中的登录按钮后,它只是挂在那里。
- 除非我单击“完成”,否则永远不会触发回调(在这种情况下,这是一个错误,不会返回实际令牌)。
我在任何日志中都没有看到任何明显的错误,所以我不确定下一步该去哪里。
我意识到有很多设置可以重复这个问题,但任何帮助将不胜感激。
编辑:我做了更仔细的调查,我得到了405
回复,但页面上没有显示实际的错误消息:
The Server responded with a status of 405
https://[mydomain].auth.us-east-2.amazoncognito.com/login?response_type=code&client_id=[myclientid]&state=[a big guid]&redirect_uri=com.testthing.myapp://signin&scope=email%20openid&code_challenge=[a long code]&code_challenge_method=S256
解决方案
因此,在我考虑了 405(不允许方法)错误后,我想通了。发生的事情是 POST 被发送到我的应用程序,但我的应用程序没有处理 POST(因为 Capacitor 默认处理 GET)。
让它完全工作是一个简单的改变,更新了AppDelegate.swift
文件以open url
正确处理:
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
// TODO parse the url and only launch cognito auth for ://signin and ://signout
return AWSCognitoAuth(forKey: "AWSCognito").application(app, open: url, options: options)
// This was here before
//return CAPBridge.handleOpenUrl(url, options)
}
希望这可以帮助其他尝试 Cognito + Swift 的人。
推荐阅读
- java - 在 Spring Boot 中解析回历日期
- timeline - Pepper 右肩间距不会在时间轴 IR 检查员中响应
- java - 将列表项从 html 表保存到 Mysql
- spring-boot - FF4j Web 控制台未正确显示
- php - 如何在 PHP 中将 3D (PSD2) 安全支付认证与 PayPal 集成
- android - 如何在 StaggeredGridLayout 中自定义放置项目?
- java - Google Ads API 提供的预测指标与网络 UI 中的预测指标完全不同
- sql - 是否可以找出用于在 SQL SERVER CLR 中加载程序集的原始路径?
- publish-subscribe - apache beam PubSub 在普通 pubsub 客户端库中读取 withIdAttribute 的替代方案
- c# - 使用 lambda 根据楼层数格式化我的字符串