HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在iOS上使用OAuth2进行身份验证大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_404_1@
@H_772_3@ 我目前正在尝试使用OAuth2授权我的用户.我目前正在使用以下库: https://github.com/p2/OAuth2

let oauth2 = OAuth2CodeGrant(setTings: [
        "client_id": "my-id","authorize_uri": "https://accounts.google.com/o/oauth2/auth","token_uri": "https://www.googleapis.com/oauth2/v3/token","scope": "profile",// depends on the API you use
        "redirect_uris": ["com.TestAuthorizeApp:/oauth2CallBACk"],])

    //let oauth2 = OAuth2CodeGrant(setTings: setTings)
    oauth2.onAuthorize = { parameters in
        print("Did authorize with parameters: \(parameters)")
    }
    oauth2.onFailure = { error in        // `error` is nil on cancel
        if let error = error {
            print("Authorization went wrong: \(error)")
        }
    }

    oauth2.authConfig.authorizeEmbedded = false
    oauth2.authorize()

当我运行它时,它在浏览器中加载谷歌,我能够登录.然后它询问我在范围内声明的权限,并且工作正常.我点击确定打开,它将重定向回我的应用程序.

但是,当我再次运行此代码时,我希望访问令牌已存储在密钥链中.然而,这似乎不起作用.

我查看了源代码并找到了以下检查:tryToObtainAccessTokenIfNeeded,它总是返回false.这意味着我再次获取页面,我需要单击“允许”.

我想知道是否有人可以帮我弄清楚为什么它不能保存钥匙串中的任何东西.这是否意味着用户并未真正进行身份验证?

谢谢.

===

编辑

根据Pascal的评论添加了oauth2.verbose = true.我得到以下输出.

OAuth2: Looking for items in keychain
 OAuth2: No access token,maybe I can refresh
 OAuth2: I don't have a refresh token,not trying to refresh

这就是我的想法.但是我仍然不确定它为什么不在钥匙串中保存/找到任何东西.

=====

编辑2

事实证明,我实际上根本没有获得访问令牌.请看这个对话:https://github.com/p2/OAuth2/issues/109和我的答案如下.

解决方法

在Pascal的帮助下: https://github.com/p2/OAuth2/issues/109我设法让它工作.事实证明我没有实施步骤:’3授权用户’,因为我应该这样做.

所以完整的解决方案是:

在我的视图控制器中,我有以下内容

let OAuth2AppDidReceiveCallBACkNotification = "OAuth2AppDidReceiveCallBACk"

override func viewDidLoad() {
    super.viewDidLoad()

    // This notification is for handling step 3 in guide.
    NsnotificationCenter.defaultCenter().addObserver(self,SELEctor: #SELEctor(ViewController.handleRedirect(_:)),name: OAuth2AppDidReceiveCallBACkNotification,object: nil)
}

func authoriseUser {
    let oauth2 = OAuth2CodeGrant(setTings: [
        "client_id": "my-id",// Use own client_id here
        "authorize_uri": "https://accounts.google.com/o/oauth2/auth",])

     //let oauth2 = OAuth2CodeGrant(setTings: setTings)
     oauth2.onAuthorize = { parameters in
        print("Did authorize with parameters: \(parameters)")
     }
     oauth2.onFailure = { error in        // `error` is nil on cancel
         if let error = error {
             print("Authorization went wrong: \(error)")
         }
     }

     oauth2.authConfig.authorizeEmbedded = false
     oauth2.authorize()
 }

// This method gets called by notification and is the last thing we need to do to get our access token. 
func handleRedirect(notification: Nsnotification) {
    oauth2.handleRedirectURL(notification.object as! NSURL)
}

上面的代码应该处理将您发送到您可以登录的Google网页,然后点击允许.

现在您需要处理在应用程序委托中返回应用程序:

let OAuth2AppDidReceiveCallBACkNotification = "OAuth2AppDidReceiveCallBACk"

 func application(application: UIApplication,openURL url: NSURL,sourceApplication: String?,Annotation: AnyObject) -> Bool {
    // you should probably first check if this is your URL being opened
    NsnotificationCenter.defaultCenter().postNotificationName(OAuth2AppDidReceiveCallBACkNotification,object: url)

    return true
}

希望这将有助于其他可能在尝试获取访问令牌时遇到问题的人.

大佬总结

以上是大佬教程为你收集整理的在iOS上使用OAuth2进行身份验证全部内容,希望文章能够帮你解决在iOS上使用OAuth2进行身份验证所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。