尝试在我的网络应用上使用 Google 和登录时,不断收到“超出未经身份验证使用的每日限制。继续使用需要注册”

Posted

技术标签:

【中文标题】尝试在我的网络应用上使用 Google 和登录时,不断收到“超出未经身份验证使用的每日限制。继续使用需要注册”【英文标题】:Keep getting a "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup" when attempting to google plus login on my web app 【发布时间】:2013-10-20 13:24:33 【问题描述】:

我正在尝试在我的网络应用程序上实施 Google plus 注册,并且我按照谷歌文档设置注册但是当我在接受权限并使用返回给我的访问令牌后尝试注册时,任何 api restcall 我make 返回超出未验证使用的每日限制。继续使用需要注册错误。我已经使用 ouath 2.0 密钥注册了我的应用程序,所以我似乎没有明白我做错了什么。这是我的代码。

城市方面:

const clientId = "5XXX000XX.apps.googleusercontent.com";
const apiKey = "AIzaSyCAXE5JSa36jcC*X7HV40SBcIWBiVGUTBE";
const scopes = "https://www.googleapis.com/auth/plus.login";
let accessToken = null;

function initer() 
  gapi.client.setApiKey(apiKey);
  // alert("Hello init");
  if ($("#authorize-button").length > 0) 
    $("#authorize-button").click(onLoginClick);
  


function onLoginClick() 
  // $("#modalLoading").modal();
  // alert("yeah");
  gapi.auth.authorize( client_id: clientId, scope: scopes, immediate: false , onConnect);


function onConnect(authResult) 
  // alert("On connect");
  if (authResult && !authResult.error) 
    alert("Hey");
    accessToken = authResult.access_token;
    triggerLogin();
   else 
    alert("Error");
  


triggerLogin = function() 
  alert("Triggering login");
  $("#modalLoading").modal();
  $.ajax(
    url: window.config.site_root + "account/google_login",
    type: "POST",
    data: "access_token=" + accessToken,
    success: onLogin,
    error() 
      onError("Logging In", "starting your session");
    ,
  );
;

onLogin = function(login) 
  alert("Login start");
  $("#modalLoading").modal("hide");
  if (login.operation) 
    location.reload();
   else 
    alert("Register will start");
    triggerRegistration();
  
;

triggerRegistration = function() 
  $("#modalLoading").modal();
  $.ajax(
    url: window.config.site_root + "account/google_registration",
    type: "POST",
    data: "access_token=" + accessToken,
    success: onRegistration,
    error() 
      alert("An Error");
    ,
  );
;

onRegistration = function(data) 
  alert("Handling register");
  $("#modalLoading").modal("hide");
  if (data.account_exists) 
    stage.showErrorModal(
      "Account already registered",
      "There is already an account with that email address, are you sure you created an account using this login method?",
    );
   else if (data.operation) 
    alert("Login now");
    triggerLogin();
   else 
    alert("Error");
    onError("Registering", "creating your account");
  
;

这是我的服务器端代码

 public function google_registration()
            
                $access_token = (isset($_POST["access_token"]) && !empty($_POST["access_token"])) ? $_POST["access_token"] : null;


                $name = null;
                $email = null;
                $account_id = null;
                $picture = null;
                $gender = null;

                try
                
                    if($access_token)
                    
                        $me = file_get_contents("https://www.googleapis.com/plus/v1/people/me?access_token=".$access_token);
                        if($me)
                        
                            $me = json_decode($me);
                            $name = $me->name.formatted;
                            $email = $me->email;
                            $account_id = $me->id;
                            $picture = $me->image;
                            $gender = ($me->gender == "female") ? 1 : 0;
                        
                    
                
                catch(Exception $error)
                
                    // let the system handle the error quietly.
                
                return $this->service_registration("google", $name, $email, $account_id, $picture, $gender);

            

【问题讨论】:

【参考方案1】:

我也遇到了同样的错误 - “已超过未经身份验证使用的每日限制。继续使用需要注册”。

我在 API 下检查了我的谷歌开发者控制台,查看与 API 密钥/授权密钥相关的项目,例如,https://console.developers.google.com/project/<your app id>/apiui/api。 Google+API 的状态设置为关闭。我把它打开了。

然后我得到了另一个访问令牌,然后尝试使用新的。它起作用了,即错误消失了,我得到了配置文件的详细信息。为了交叉检查这是否确实是错误的原因,我回到控制台并禁用了 Google+ API。但是现在,我得到了错误:

“未配置访问。请使用 Google Developers Console 为您的项目激活 API。”

因此,我不能 100% 确定这是在我的开发者控制台中打开/关闭了 Google+ API,但请确保它已打开。另外,开机后等待几分钟,并确保每次都获得一个新的令牌,然后再尝试。

【讨论】:

在 Google 控制台启用 API 成功!谢谢队友:) 请注意:如果您的项目是 google 脚本,则您需要转到 script.google.com/home/usersettings【参考方案2】:

当您已经登录并且仍然尝试一次又一次地登录时,会发生此问题。我遇到了同样的错误,所以做了一些实验 1)我在手机上打开了网站,一切都很好。 2)然后我在另一台笔记本电脑上尝试并使用不同的gmail帐户登录,它再次正常工作。 3)在我的第一台笔记本电脑上,我通过单击“登录”按钮再次绑定,我遇到了同样的错误,所以我打开了 google.com,然后完全注销,然后再次尝试,这次成功了。所以我相信,问题是在没有注销的情况下一次又一次地点击登录按钮。

我不确定这是否真的是一个问题,但至少这是我发现的。我仍在尝试,尝试和尝试,如果我发现其他任何内容,我会发布。

干杯!!

【讨论】:

这绝对是我的问题。非常令人困惑,因为 API 都已启用,我正确传递了所有内容,但是该错误消息很糟糕!我打开了一个隐身窗口,它立即工作。在普通浏览器中注销,然后再次登录,它再次完美运行。谢谢!【参考方案3】:

确保您在此处启用了 Google+ Api。

没有它你会得到如下错误:

"domain": "usageLimits",
"reason": "dailyLimitExceededUnreg",
"message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",

启用它:

1) 打开https://console.developers.google.com

2) 选择您的项目(右上角)

3) 在搜索框中搜索“Google+ API”,如果尚未启用,则启用它。

【讨论】:

我没有找到这个屏幕?它在哪里? 我没有把你减掉,我只是问一个问题。我收到此错误,但在我的配额屏幕中,我低于最大值。 好的。我找到了。但是限制设置为 10 000,我只是测试......低于 20 次。所以它不能修复我的 pb。谢谢 这似乎又过时了【参考方案4】:

您必须在 URL 中添加apiKey

$curl = curl_init( 'https://www.googleapis.com/urlshortener/v1/url?key=AIza3834-Key' );

【讨论】:

从安全的角度来看,这听起来不太好,但是,嘿,它奏效了。 +1【参考方案5】:

所以我遇到了这个问题,上述两种方法/解决方案(启用 API 访问和注销帐户)对我不起作用,因为对于 google+ 登录,您必须在授权标头中传递访问令牌http 调用。

这是通过 jQuery 实现的方法:

    $.ajax(
      type: "GET", 
      url: "https://www.googleapis.com/plus/v1/people/me",
      headers: 
       "Authorization":"Bearer " + access_token,
      
    );

看来您的问题在于您在参数中传入 access_token 的服务器端代码(这不是必需的)。

这是我对 php 实现的尝试:

$opts = array(
'http'=>array(
 'method'=>"GET",
 'header'=>"Authorization: Bearer ".$access_token 
 )
);

$context = stream_context_create($opts);

// Open the file using the HTTP headers set above
$file = file_get_contents('https://www.googleapis.com/plus/v1/people/me', false, $context);'

【讨论】:

虽然官方文档确实声明您可以将 access_token 作为 Query 参数或在标头中传递,但我在 Query 中传递它时总是收到该错误。它仅在作为标头传递时才有效。它说:“通过包含 access_token 查询参数或 Authorization: Bearer HTTP 标头,在对 API 的请求中包含访问令牌”。这是链接:developers.google.com/identity/protocols/OAuth2WebServer【参考方案6】:

希望您通过 https 发送访问令牌!可能值得考虑改用代码并在服务器端交换访问令牌,以提高安全性,如果没有别的,这里有一些关于这种方法的文档:https://developers.google.com/+/web/signin/server-side-flow

关于您看到的问题,访问令牌似乎是错误的,或者没有正确通过。您能否根据 tokeninfo 端点检查您收到的访问令牌:https://www.googleapis.com/oauth2/v1/tokeninfo?access_token= - 这应该显示有效信息。代码中没有什么特别突出,但是如果令牌被破坏,您可能会看到类似的错误。

【讨论】:

【参考方案7】:

我也遇到了同样的问题,解决方法是:设置 APIKEY

【讨论】:

参考:developers.google.com/api-client-library/php/auth/api-keys【参考方案8】:

我也很绝望,终于找到了解决办法。唯一的问题是添加链接到您的应用程序的正确 api 令牌,在我的例子中是浏览器令牌,并且一切正常。

示例:我想将所有事件与我的日历关联

https://www.googleapis.com/calendar/v3/calendars/calendar_id/events?&key=api_key

也许我会帮助遇到同样问题的人。

祝你好运

【讨论】:

【参考方案9】:

我试图使用access_token 来获取返回用户的姓名和图片,而他们在之前的会话中已经登录。在遇到"unauthenticated use" 错误消息后,这就是最终在 PHP 中通过 cURL 起作用的方法。

//initialize provider specific params for oauth2
$access_token = <fetched from app database from last login> //remember to never expose this to users
$api_url = 'https://www.googleapis.com/plus/v1/people/me';
$headers = [
    'Authorization: Bearer '.$access_token
];

//send curl request
$curl = curl_init();
$curl_opts = [
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_POST => 0, //GET
    CURLOPT_TIMEOUT => 30,
    CURLOPT_SSL_VERIFYPEER => 1,
    CURLOPT_SSL_VERIFYHOST => 2,
    CURLOPT_URL => $api_url,
    CURLOPT_HTTPHEADER => $headers,
];
curl_setopt_array($curl, $curl_opts);
$curl_response = json_decode(curl_exec($curl), true);
$curl_status = curl_getinfo($curl, CURLINFO_HTTP_CODE);

//parse curl response from provider into name and icon fields for my app
$name = $curl_response['displayName'];
$icon = $curl_response['image']['url'];

注意https://www.googleapis.com/plus/v1/people/me(通过access_token返回用户)和https://www.googleapis.com/oauth2/v4/token(通过code初始登录)返回不同字段/结构中的用户名和图片。

【讨论】:

【参考方案10】:

我在 javascript 端(客户端)遇到了问题。 就我而言,有必要将API_KEY 添加到gapi.client.init()

充分发挥我的作用:

async function initClient () 
  return new Promise((resolve, reject) => 
    const API_KEY = "YOUR_GOOGLE_API_KEY"
    const CLIENT_ID = "YOUR_GOOGLE_OAUTH2_CLIENT_ID"
    const DISCOVERY_DOCS = ['https://www.googleapis.com/discovery/v1/apis/youtube/v3/rest']
    const SCOPES = 'https://www.googleapis.com/auth/youtube.readonly'

    const initData =  apiKey: API_KEY, clientId: CLIENT_ID, discoveryDocs: DISCOVERY_DOCS, scope: SCOPES 

    gapi.client.init(initData).then(function () 
        // YOUR CODE HERE
    , function (error) 
      reject(new Error('Reject Error: ' + error))
    )
      .catch(err => console.log('Catch Error', err))
  )

API_KEYCLIENT_ID 可以从 here 获取(Google Cloud Platform -> APIs & Services -> Credentials -> Credentials [Tab])

【讨论】:

【参考方案11】:

就我而言,它发生在一天中的特定时间,花了几个小时后终于发现我的每日配额限制(每 100 秒查询次数)当时超出了,因为高请求数。所以它抛出了错误。我已联系谷歌支持以增加它们。

【讨论】:

【参考方案12】:

就我而言,这是因为我使用的是旧的访问令牌。您必须记住,访问令牌的生命周期很短,因此您必须使用刷新令牌来生成新的访问令牌。示例(使用 PHP 类):

// Get the access token from DB or filesystem
$accessToken = $this->getAccessToken();
// Set the access token
$this->client->setAccessToken($accessToken);

// Refresh the token if it's expired.
if ($this->client->isAccessTokenExpired()) 
    $this->client->fetchAccessTokenWithRefreshToken($this->client->getRefreshToken());
    // Save the new access token to DB or filesystem
    $this->saveAccessToken($this->client->getAccessToken());

【讨论】:

【参考方案13】:

我刚刚遇到了同样的问题,发现出了什么问题。

当您从库中启用 Google Plus API 时,需要执行额外的步骤才能完全激活。您必须点击 Google Plus API 库页面中的“管理”按钮并填写两个问题答案并提交。就是这样!!

这解决了我的问题,我希望它也能解决您的问题。这是我点击“管理”按钮后拍摄的那个页面的屏幕截图,上面写着“将凭据添加到您的项目”。

【讨论】:

【参考方案14】:

我收到以下错误:


 "error": 
  "errors": [
   
    "domain": "usageLimits",
    "reason": "dailyLimitExceededUnreg",
    "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use 
requires signup.",
    "extendedHelp": "https://code.google.com/apis/console"
   
  ],
  "code": 403,
  "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use 
requires signup."
 

我不确定,但我认为这是在 Google Developers Console 的 OAuth 同意屏幕上引起的,有此消息,

用户上限限制了在请求未经批准的敏感或受限范围时可以授予您的应用权限的用户数量。用户上限适用于项目的整个生命周期,并且不能重置或更改。已验证的应用程序仍将在此页面上显示用户上限,但如果您只请求批准的敏感或受限范围,则用户上限不适用。如果您的用户看到“未验证的应用”屏幕,那是因为您的 OAuth 请求包含尚未批准的其他范围。

我要求限制范围:

private val SCOPES: List<String> = arrayListOf(DriveScopes.DRIVE_FILE, DriveScopes.DRIVE_APPDATA, DriveScopes.DRIVE)

虽然我的应用程序正在开发中,但它似乎需要验证,但我认为在我的应用程序开发的整个生命周期中,我已经登录了 100 多次。 (请参阅 OAuth 用户配额) https://support.google.com/cloud/answer/7454865?authuser=0

我想我必须验证我的应用程序有没有人知道是否是这种情况...?

【讨论】:

【参考方案15】:

我认为(至少对某些人来说)这个错误可能会导致他们走错方向。就我而言,我的 API 调用正常工作,然后突然停止。这是我在解决此错误时的思考过程,希望对某人有所帮助:

观察

产生了新错误
 "error": 
  "errors": [
   
    "domain": "usageLimits",
    "reason": "dailyLimitExceededUnreg",
    "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",
    "extendedHelp": "https://code.google.com/apis/console"
   
  ],
  "code": 403,
  "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
 

这发生在尝试通过以下调用向 Google Calendar API 发送更新的测试期间:
service.events().patch(calendarId='primary', eventId=id, sendNotifications=True, body=update).execute()
这发生在我更新了我的 time_start 变量中的数据后不久,该变量在发送到 google 的 json 中引用:
    update = 
        'start': 
            'dateTime': time_start,  # Specifically this variable (time_start) was changed
            'timeZone': time_zone,
        ,
        'end': 
            'dateTime': time_end,
            'timeZone': time_zone,
        ,
        'description': description,
    
time_start 变量中的信息从: 2020-05-13T17:06:42-07:002020-05-13T17:06:42(注意缺少的 UTC 偏移量)

动作

更新了填充 time_start 的代码,以包含正在传递给 google 日历 API 的缺失 UTC 偏移量。

结果

有效载荷已成功传输到谷歌日历,我的活动已通过更新修补

【讨论】:

以上是关于尝试在我的网络应用上使用 Google 和登录时,不断收到“超出未经身份验证使用的每日限制。继续使用需要注册”的主要内容,如果未能解决你的问题,请参考以下文章

Flutter iOS 应用需要 Google 登录密码

部分手机上google play游戏登录失败错误

当我的用户使用 gae-simpleauth 登录时,如何从 Google 帐户中检索电子邮件地址并将其存储在我的应用程序的用户配置文件中?

在我的 GAE 应用程序中检查 Google 用户的 gtalk 好友在线状态,当他登录时

如何在我的 Android 应用程序中集成 google+ 登录?

Google play 游戏在 iOS 上登录错误