【问题标题】:How to extend permission scope GTMOAuth2ViewControllerTouch如何扩展权限范围 GTMOAuth2ViewControllerTouch
【发布时间】:2016-05-03 02:49:29
【问题描述】:

我有一个使用GTMOAuth2ViewControllerTouch 进行登录的应用程序。

最初范围只是使用https://www.googleapis.com/auth/userinfo.email,所以用户已经使用此权限登录。

我想申请https://www.googleapis.com/auth/calendar的新权限

所以当它从钥匙串中检索 auth 对象时:

GTMOAuth2Authentication *auth = [GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:keychainItemName
                                                                                              clientID:clientID
                                                                                          clientSecret:clientSecret];

并且这个新权限不在auth对象的范围内,我尝试再次呈现GTMOAuth2ViewControllerTouch以扩大范围,但它需要用户再次输入凭据。

我希望这个控制器只是请求批准这个新权限。

我怎样才能实现这种行为? google-api-objectivec-client可以吗

更新:

我已经能够通过使用GTMOAuth2ViewControllerTouchswapInCookiesswapOutCookies 方法更接近..

对于新安装,这些方法将再次打开同一个控制器(用于登录的 web 视图),第二次它只是请求权限,使用户无法再次输入他的凭据。

但现在的问题是,当前的应用程序在登录完成时不会swapOutCookies,因此没有 cookie 可以交换到 web 视图中,所以它要求登录,而用户应该是已登录。

【问题讨论】:

    标签: ios google-calendar-api google-api-objc-client


    【解决方案1】:

    您可以使用GIDSignIn 共享实例添加新范围,方法是调用scopes,然后调用signIn 请求同意。如需更多信息,请访问 iOS Google 身份文档中的 Requesting additional scopes

    为请求额外范围提供的示例是

    NSString *driveScope = @"https://www.googleapis.com/auth/drive.readonly";
    NSArray *currentScopes = [GIDSignIn sharedInstance].scopes;
    [GIDSignIn sharedInstance].scopes = [currentScopes arrayByAddingObject:driveScope];
    
    [[GIDSignIn sharedInstance] signIn];
    

    【讨论】:

    • 如果项目中没有GIDSignIn 包怎么办?用GTMOAuth2ViewControllerTouch 可以做到吗? (这是我正在扩展功能的项目正在使用的工具。)
    • 我认为您使用的是 Google Toolkit for Mac?我检查了库的 oAuth2 客户端 repo,您​​可以使用 GTMOAuth2SignIn.standardGoogleAuthenticationForScope 设置范围。虽然我不能确定它是否具有与GIDSignIn 相同的灵活性,但您可能想尝试一下。希望这可以解决问题。
    • 感谢您的帮助...但是,该方法返回一个GTMOAuth2Authentication,我已经用GTMOAuth2ViewControllerTouch 恢复了它-> authForGoogleFromKeychainForName:clientID:clientSecret:;所以它不会改变我正在展示的 GTMOAuth2ViewControllerTouch 控制器的行为。它确实给了我一个使用 controllerWithAuthentication:authorizationURL:keychainItemName:completionHandler 的想法,但它再次要求提供凭据。唯一似乎可以解决问题的方法是在 cookie 之前已被换出的情况下交换它们......
    猜你喜欢
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    相关资源
    最近更新 更多