尝试谷歌加登录我的网络应用程序时,继续获得“超出未经验证的使用的每日限制。持续使用需要注册”

时间:2013-10-12 14:53:35

标签: javascript php google-api google-plus

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

Cient Side:

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);

            }

15 个答案:

答案 0 :(得分:27)

我也遇到了同样的错误 - “超出未经验证的使用限制。持续使用需要注册”。

我在API下检查了我的google开发者控制台,了解与API密钥/身份验证密钥相关联的项目,例如https://console.developers.google.com/project/<your app id>/apiui/api。 Google + API的状态设置为OFF。我把它打开了。

然后我获得了另一个访问令牌,然后尝试使用新的令牌。它工作,即错误消失了,我得到了配置文件的详细信息。要反复核对这是否确实是导致错误的原因,我又回到了控制台并停用了Google+ API。但现在,我收到了错误:

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

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

答案 1 :(得分:10)

google api

Make sure you have Google+ Api here enabled.

Without it you will get errors like:

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

To enable it:

1) open https://console.developers.google.com

2) choose your project (top right corner)

3) search for "Google+ API" in search box and enable it if it is not enabled already.

答案 2 :(得分:9)

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

我不确定这是否真的是一个问题,但至少这是我发现的。我还在尝试,尝试和尝试,如果我找到了其他任何东西,我会发布。

干杯!!

答案 3 :(得分:8)

所以我遇到了这个问题,上面两个方法/解决方案(启用API访问和退出帐户)对我来说不起作用,因为对于google + signin你必须在授权标题中传入访问令牌。 http电话。

以下是通过jQuery实现的方法:

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

您的问题似乎是服务器端代码,您在params中传入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);'

答案 4 :(得分:7)

您必须使用以下网址添加apiKey

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

答案 5 :(得分:5)

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

关于您所看到的问题,似乎访问令牌很糟糕,或者没有正确通过。您是否可以检查您在tokeninfo端点上收到的访问令牌:https://www.googleapis.com/oauth2/v1/tokeninfo?access_token= - 应显示有效信息。在代码中没有任何突出显示,但如果令牌被破坏,您可能会看到类似的错误。

答案 6 :(得分:1)

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

答案 7 :(得分:1)

我也很绝望,最后我设法找到了解决方案。唯一的问题是添加链接到您的应用程序的正确api令牌,在我的情况下是浏览器令牌,它一切正常。

示例:我希望将所有与我的日历相关联的事件

https://www.googleapis.com/calendar/v3/calendars/ {CALENDAR_ID} /事件&安培;关键= {} API_KEY

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

祝你好运

答案 8 :(得分:0)

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

答案 9 :(得分:0)

在我的情况下,这是因为我使用的是旧的访问令牌。您必须记住,访问令牌的生命周期很短,因此您必须使用刷新令牌生成新的访问令牌。示例(使用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());
}

答案 10 :(得分:0)

我试图使用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的初始登录)在不同的字段/结构中返回用户名和图片。

答案 11 :(得分:0)

我在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-> API和服务->凭据->凭据[Tab])

答案 12 :(得分:0)

我只是遇到了同样的问题,并找出了问题所在。

当您从媒体库中启用Google Plus API时,有一些额外的步骤可以完全激活。您必须在Google Plus API库页面中单击“管理”按钮,并填写两个问题答案并提交。就是这样!

这解决了我的问题,希望它也能解决您的问题。这是单击“管理”按钮(显示“向您的项目添加凭据”)后带给我的页面截图。

Google Plus API Library Add credentials to your project

答案 13 :(得分:0)

我遇到以下错误:

{
 "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

我猜我必须验证我的应用程序有人知道这种情况吗??

答案 14 :(得分:0)

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

观察

  • 产生了新错误
pip install opencv--contrib-python
  • 这是在尝试通过以下调用向Google Calendar 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."
 }
}
  • 这发生在我更新service.events().patch(calendarId='primary', eventId=id, sendNotifications=True, body=update).execute() 变量中的数据后不久,该变量在发送到google的json中引用了:
time_start
  • 我的 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_start2020-05-13T17:06:42-07:00(请注意缺少的UTC偏移量)

动作

  • 更新了我的填充2020-05-13T17:06:42的代码,以包含缺少的UTC偏移量,该偏移量已传递给Google日历API。

结果

  • 有效负载已成功传输到Google日历,并且我的事件已通过更新进行了修补