私は自分のウェブアプリにGoogleプラスサインアップを実装しようとしていますが、Googleドキュメントに従ってサインアップをセットアップしましたが、許可を受け入れて返されたアクセストークンを使用してサインアップしようとすると、認証されていない使用の1日の制限を超えました。継続して使用するにはサインアップエラーが必要です。私はすでに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);
}
私も同じエラーに遭遇しました-「認証されていない使用の1日の制限を超えました。継続使用するにはサインアップが必要です」。
APIキー/認証キーに関連付けられているプロジェクトのAPIの下で、たとえばhttps://console.developers.google.com/project/<your app id>/apiui/api
。 Google + APIのステータスはオフに設定されました。オンにしました。
次に、別のアクセストークンを取得してから、新しいトークンで試しました。つまり、エラーがなくなり、プロファイルの詳細がわかりました。それが本当にエラーの原因であるかどうかをクロスチェックするために、コンソールに戻り、Google + APIを無効にしました。しかし、今、私はエラーを取得します:
「アクセスが構成されていません。GoogleDevelopers Consoleを使用して、プロジェクトのAPIを有効にしてください。」
そのため、デベロッパーコンソールでGoogle+ APIをオン/オフにすることは100%確信できませんが、必ずオンにしてください。また、電源を入れてから数分待ってから、毎回新しいトークンを取得してから試すようにしてください。
ここで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」を検索し、有効になっていない場合は有効にします。
この問題は、すでにログインしているにもかかわらず、何度もログインしようとしたときに発生します。私は同じエラーに直面したので、いくつかの実験をしました。 2)次に、別のラップトップで試し、別のGmailアカウントを使用してログインしましたが、再び正常に機能しました。 3)最初のラップトップで「サインイン」ボタンをクリックして再び結んだので、同じエラーが発生したので、google.comを開いて完全にログアウトしてからもう一度試してみました。だから、問題はログアウトせずにログインボタンを何度もクリックしていると思います。
これが本当に問題かどうかはわかりませんが、少なくともこれは私が見つけたものです。私はまだ試しており、試してみて、他に何かを見つけたら投稿します。
乾杯!!
したがって、私はこの問題に遭遇し、上記の2つの方法/ソリューション(APIアクセスを有効にし、アカウントからサインアウトする)はうまくいきませんでした.
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);'
apiKey
にURLを追加する必要があります。
$curl = curl_init( 'https://www.googleapis.com/urlshortener/v1/url?key=AIza3834-Key' );
そのアクセストークンをhttpsで送信することを願っています。代わりにコードを使用し、サーバー側でアクセストークンを交換することを検討する価値があるかもしれません。セキュリティを改善するために、他に方法はありませんが、そのアプローチに関するドキュメントがここにあります: https://developers.google.com/+/web/signin/server-side-flow
表示されている問題に関しては、アクセストークンが不良であるか、正しく処理されていないようです。 tokeninfoエンドポイントに対して受け取ったアクセストークンを確認できます: https://www.googleapis.com/oauth2/v1/tokeninfo?access_token= -有効な情報が表示されます。コードでオフになっているものとして目立つものはありませんが、トークンが破損している場合、同様のエラーが表示される可能性があります。
私は同じ問題を抱えています、解決策は:APIKEYを設定することです
私も必死で、ついに解決策を見つけることができました。唯一の問題は、アプリにリンクされた正しいAPIトークンを追加することです。私の場合はブラウザートークンであり、すべて正常に機能します。
例:すべてのイベントをカレンダーに関連付けたい
https://www.googleapis.com/calendar/v3/calendars/ {calendar_id}/events?&key = {api_key}
同じ問題を抱えている人を助けるかもしれません。
幸運を
JavaScript側(クライアント側)で問題が発生しました。私の場合、gapi.client.init()
に_API_KEY
_を追加する必要がありました
完全な私の機能:
_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_KEY
_および_CLIENT_ID
_は、 here から取得できます(Google Cloud Platform-> APIs&Services-> Credentials-> Credentials [Tab])
私は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
を介した最初のログインの場合)異なるフィールド/構造のユーザー名と画像を返します。
私の場合、それはその日の特定の時間に発生しました。数時間を費やした後、リクエストの数が多かったため、その時点で1日の割り当て制限(100秒あたりのクエリ)を超えていることが最終的にわかりました。そのため、エラーがスローされていました。 Googleサポートに連絡して、それらを増やしました。
私の場合、古いアクセストークンを使用していたためです。アクセストークンの寿命は短いため、更新トークンを使用して新しいアクセストークンを生成する必要があることに注意してください。例(PHP Class)を使用):
// 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());
}