【问题标题】:How to get Password AutoFill to work with ASWebAuthenticationSession?如何让密码自动填充与 ASWebAuthenticationSession 一起使用?
【发布时间】:2020-09-12 10:15:28
【问题描述】:

我有一个遵循password auto-fill requirements 的示例HTML 表单。在没有应用程序的情况下导航到网页时,使用内置的 Safari 应用程序,登录和注册表单的本机密码自动填充对话框正确显示:

但是,在应用程序中查看时,相同的流程不会在登录或注册提交中触发对话框。它只是关闭登录/注册屏幕而没有任何错误。

这就是我的视图控制器的样子:

class ViewController: UIViewController {

    @IBAction func didTapLoginButton() {
        let session = ASWebAuthenticationSession(
            url: URL(string: "https://example.com/login.html")!,
            callbackURLScheme: "customscheme") {
                print($0, $1)
        }

        session.prefersEphemeralWebBrowserSession = true
        session.presentationContextProvider = self
        session.start()
    }
}

extension ViewController: ASWebAuthenticationPresentationContextProviding {

    func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor {
        view.window!
    }
}

有没有办法让密码自动填充功能通过ASWebAuthenticationSession 与移动应用程序一起使用?我也试过SFSafariViewController 但同样的问题。我有一个sample iOS app here。非常感谢任何帮助或经验!

【问题讨论】:

    标签: ios swift autofill aswebauthenticationsession


    【解决方案1】:

    来自docs

    密码自动填充仅推荐您应用的凭据 关联域,并且用户必须使用 Face ID 或 在访问这些凭据之前先触摸 ID。

    确保应用与您的域相关联(代码中的example.com)。这将允许 iCloud 钥匙串识别登录表单并建议为该域存储的任何凭据。

    1. 将您的应用与域相关联,如 here 所述。
    2. html 标签添加到您的登录表单,如here 所述。
    3. 在启动 ASWebAuthenticationSession 之前,确保用户在 iOS 设备上已正确验证。

    【讨论】:

    • 这不起作用,因为 Web 凭据仅适用于本机文本字段。如果我们必须这样做,它将无法与任何 3 方 OAuth 服务一起使用,例如 Google、GitHub、Facebook 等登录,因为他们必须使用其 SDK 的每个消费者更新其关联文件。
    【解决方案2】:

    经过长时间的研究,我发现的唯一可行且干净的解决方案是添加一个登录后页面,正如 here 所建议的那样。这样保存凭据提示将不会被忽略。

    很遗憾,我没有从 iOS 端找到任何解决方案,非常感谢,因为在我的情况下,由于项目限制,我无法更改服务器端。

    【讨论】:

    猜你喜欢
    • 2022-01-01
    • 2019-09-02
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 2019-04-05
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多