我对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 ?? ""])
}
}
通过我在自述文件中描述的所有设置,这是亮点:
我在任何日志中都没有看到任何明显的错误,所以我不确定下一步该怎么做。
我知道有很多设置可以重复此问题,但是可以提供任何帮助。
编辑:我已经进行了更仔细的调查,并且得到了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
答案 0 :(得分:0)
因此,在考虑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上尝试过手的人。