アプリに新しい Google+サインインボタンを追加していますが、認証された呼び出しを行う際に問題が発生しています。ドキュメントに記載されているようにhtmlとjavascriptを含め、サインインは機能します。アクセストークンも見れます。ただし、認証されたエンドポイントにリクエストを送信すると、「無効な資格情報」という応答が返されます。たとえば、私はしようとしています:
gapi.client.oauth2.userinfo.get().execute(function(resp){console.log(resp);});
通常の Google oauth メソッド ( gapi.auth.authorize()) を使用すれば、この呼び出しを行うことができます。ここで何が起こっているのですか?私は何を間違っていますか?
google+ ボタンで userinfo.email と userinfo.profile スコープをリクエストしています。
G+ ログインの HTML:
<span id="signinButton">
<span
class="g-signin"
data-callback="signinCallback"
data-apppackagename="com.mypackage"
data-clientid="myclientID"
data-cookiepolicy="single_host_origin"
data-requestvisibleactions="http://schemas.google.com/AddActivity"
data-scope="https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/devstorage.read_only https://www.googleapis.com/auth/plus.login">
G+ サインイン ボタン用に含まれる js (直前):
(function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/ client:plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
G+ ボタンのコールバック:
function signinCallback(authResult) {
if (authResult['access_token']) {
signin();
} else if (authResult['error']) {
console.log('There was an error: ' + authResult['error']);
}
}
ユーザープロフィールのリクエスト:
gapi.client.oauth2.userinfo.get().execute(function(resp) {console.log(resp);});
リクエストには、トークンを含む Authorization ヘッダーが含まれています(chrome dev ツールで確認できます)。
アップデート:
また、即時モードで gapi.auth.authorize() を使用しようとしました。これは機能せず、null 応答を返しました。即時モードを false に設定してこれを実行すると、認証プロンプトが表示されました (再度、g+ ボタンで認証した後)。この後、承認された呼び出しが機能しました。以下は私のコードです:
gapi.auth.authorize({client_id: 'myClientID', scope: 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/devstorage.read_only',
immediate: mode, response_type: 'token id_token'}, callback);