5

我正在尝试使用 ASWebAuthenticationSession 从 Stripe 的 OAuth 端点获取身份验证代码- 此事件发生在调用我的 Stripe 重定向 url 之后。

不幸的是,authSession 的完成处理程序不会使用 callbackURL 进行回调。我需要这个 callbackURL 来查询授权码。我已经阅读了关于这个主题的不同文章,但我不明白为什么我的实现不能按照我期望的方式工作。

这是我的代码:


class CreateStripeConnectAccountController: UIViewController {

  var authSession: ASWebAuthenticationSession!

  override func viewDidLoad() {
      super.viewDidLoad()
      configureAuthSession()
  }

  private func configureAuthSession() {

    let urlString = Constants.URLs.stripeConnectOAuth // Sample URL

    guard let url = URL(string: urlString) else { return }

    let callbackScheme = "myapp:auth"    

    authSession = ASWebAuthenticationSession(url: url, callbackURLScheme: callbackScheme, completionHandler: { (callbackURL, error) in
       guard error == nil, let successURL = callbackURL else {
          print("Nothing")
          return
       }

       let oauthToken = NSURLComponents(string: (successURL.absoluteString))?.queryItems?.filter({$0.name == "code"}).first

       print(successURL.absoluteString)
    })

    authSession.presentationContextProvider = self
    authSession.start()
  }
}

extension CreateStripeConnectAccountController: ASWebAuthenticationPresentationContextProviding {
    func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor {
        self.view.window ?? ASPresentationAnchor()
    }
}
4

3 回答 3

2

我相信问题在于您正在nilcallbackURLScheme. 您需要提供一个重定向到您的应用的 URL 方案:

查看苹果的认证示例:https ://developer.apple.com/documentation/authenticationservices/authenticating_a_user_through_a_web_service

以下是关于如何为您的应用创建自定义 URL 方案的苹果文档:https ://developer.apple.com/documentation/uikit/inter-process_communication/allowing_apps_and_websites_to_link_to_your_content/defining_a_custom_url_scheme_for_your_app 。

于 2020-02-25T18:35:37.767 回答
1

我知道它很旧,但无论如何。确保,那callbackScheme和使用的方案是redirect_uri相同的。

于 2020-04-23T10:46:24.820 回答
0

您的 callbackSchememyapp:auth格式不正确。

该符号:不能用于 URI 的方案名称。

参见下面的RFC定义Scheme

方案名称由一系列字符组成,以字母开头,后跟字母、数字、加号 ("+")、句点 (".") 或连字符 ("-") 的任意组合。

https://datatracker.ietf.org/doc/html/rfc3986#section-3.1

因此,修改callbackURLschemeasmyapp-authmyapp.auth效果很好。

于 2021-06-18T15:04:58.170 回答