没有为 ASWebAuthenticationSession 调用会话完成处理程序

Posted

技术标签:

【中文标题】没有为 ASWebAuthenticationSession 调用会话完成处理程序【英文标题】:Session completion handler not being called for ASWebAuthenticationSession 【发布时间】:2020-03-16 08:48:07 【问题描述】:

我正在尝试使用 ASWebAuthenticationSession 网络视图。身份验证完成后,不会调用会话完成处理程序。因此,网络视图不会关闭。

guard let authURL = URL(string: "https://github.com/login/oauth/authorize?client_id=<client_id>/") 
else  return 
let scheme = "octonotes"
session = ASWebAuthenticationSession.init(url: authURL, callbackURLScheme: scheme, completionHandler:  callbackURL, error in
       // Handle the callback.
       print(callbackURL!)
       print(error!)      
        )
session?.presentationContextProvider = self
session?.start()

我在 info.plist 中设置了回调 url 方案。同样在 Targets -> info -> URL Types 中更新 看起来像: URL Types

运行上述代码后,会出现 ASWebAuthenticationSession 网页视图,为用户提供登录页面。身份验证完成后,Web 视图不会像 WKWebView 那样关闭。 Web 视图左上角有取消选项,它调用完成处理程序时出错。

有没有办法在身份验证会话完成后关闭 webview?

【问题讨论】:

【参考方案1】:

您的 authURL 中似乎缺少重定向 URI - 所以 GitHub 不知道将成功的身份验证重定向到哪里。

试试这个:

let scheme = "octonotes"
guard let authURL = URL(string: "https://github.com/login/oauth/authorize?client_id=<client_id>&redirect_uri=\(scheme)://authcallback")

请记住,您可能还缺少一些其他参数,请在此处查看您可以提供的其他参数https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#redirect-urls

【讨论】:

以上是关于没有为 ASWebAuthenticationSession 调用会话完成处理程序的主要内容,如果未能解决你的问题,请参考以下文章

//没有为类型'Object'定义运算符'[]'。? [复制]

没有为“GoogleMapController”类型定义方法“addMarker”

有没有办法避免隐式转换为 void*?

没有为 UITextField 正确添加 inputAccessoryView

为啥 ProgressDialog 的背景没有设置为透明?

没有为类 'Map<>' 定义 getter 为 Map 列出 getter