AWSCognito Auth`getSession`不会在Swift中触发回调

时间:2019-02-09 23:19:58

标签: ios swift amazon-cognito capacitor

我对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 ?? ""])
    }
}

通过我在自述文件中描述的所有设置,这是亮点:

  1. 我设置了Cognito用户池,添加了一个用户,并为此创建了一个应用程序页面
  2. 我带来了最新的AWSCognito吊舱(目前为2.9)
  3. 我为Capacitor编写了一个插件来弥合差距,但理论上Capacitor与此无关,因为它似乎纯粹是Swift的本机实现问题:https://github.com/Kikketer/CapacitorTest/blob/master/ios/App/App/CognitoPlugin.swift#L12
  4. 当我单击应用程序中的“登录”按钮时,Cognito会像应有的那样在“特殊iOS浏览器”中启动,但是当我单击该浏览器中的“登录”按钮后,它就会挂在那里。
  5. 除非单击“完成”,否则永远不会触发该回调(在这种情况下,这是错误的,没有实际的令牌返回)。

我在任何日志中都没有看到任何明显的错误,所以我不确定下一步该怎么做。

我知道有很多设置可以重复此问题,但是可以提供任何帮助。

编辑:我已经进行了更仔细的调查,并且得到了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

1 个答案:

答案 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上尝试过手的人。