强制谷歌显示帐户选择器和同意屏幕

时间:2014-05-02 20:42:16

标签: google-api google-oauth omnicontacts-gem

我可以单独使用prompt=consentprompt=select_account,但Google似乎不允许我将它们合并。我按照Force google account chooser的回答中的建议尝试了prompt=consent+select_account,但失败了错误:"无效提示:同意+ select_account"。

文档(https://developers.google.com/accounts/docs/OAuth2Login)说"以空格分隔的列表",所以我尝试了consent select_account但是失败了:"找不到请求的网址这个服务器。"

我也尝试过合并prompt=select_accountapproval_prompt=force,但谷歌也不喜欢这样。

其他人在结合同意书和帐户选择器方面有好运吗?

更新

这是我的JavaScript方法,用于创建从gmail获取联系人的URL

$scope.importGmailContacts = function() {
    provider = 'gmail';
    $scope.importing_from_gmail = true;
    window.open(protocol + "://" + host + ":" + port + "/contacts/gmail", "_blank",
     "toolbar=yes, scrollbars=yes, resizable=yes, top=0, left=0, width=600, height=600, prompt='select_account+consent', approval_prompt=force");
}

我尝试过集体和单独设置promptapproval_prompt,但似乎无效。 Refer to this question

3 个答案:

答案 0 :(得分:1)

我刚试过这个,并且在空格分隔时它可以工作:

options [:prompt] ='select_account consent'

答案 1 :(得分:1)

您需要添加:access_type=online&prompt=select_account+consent

private static final String AUTHORIZE_URL 
    = "https://accounts.google.com/o/oauth2/auth?"
      + "response_type=code&access_type=online&prompt=select_account+consent"
      + "&client_id=xxx&redirect_uri=xxx";

private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope=xxx";

...

答案 2 :(得分:-1)

  

https://accounts.google.com/o/oauth2/auth?client_id=XXXX&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/analytics.readonly&response_type=code&prompt=select_account+consent&approval_prompt=force

导致错误

  
      
  1. 这是一个错误。
  2.         

    错误:invalid_request

         

    冲突参数:approval_prompt和提示

Prompt和approval_prompt参数不能一起使用。

  

prompt可选。

以空格分隔的区分大小写的提示列表,以呈现用户。如果您未指定此参数,则仅在您的应用首次请求访问时才会提示用户。可能的值是:
  不显示任何身份验证或同意屏幕。不得与其他值一起指定   同意提示用户同意    select_account 提示用户选择一个帐户。

如果内存服务appro_prompt是较旧的方式,并且谷歌在2012年的某个时候添加了提示。我实际上找不到任何关于approval_prompt的文档,但是如果内存服务它就像做提示=同意它只是再次请求访问。