ユーザーデータやその他のリソースへのアクセス権をユーザーにリクエストする場合は、最初のリクエストですべてのスコープを事前にリクエストするか、増分認可を使用して、必要なスコープのみをリクエストできます。増分認可を使用すると、アプリは最初にアプリの起動に必要なスコープのみをリクエストし、新しい権限が必要な場合は、ユーザーにリクエストの理由を示すコンテキストで追加のスコープをリクエストします。
たとえば、アプリでユーザーが音楽の再生リストを Google ドライブに保存できるようにする場合、アプリはログイン時に基本的なユーザー情報をリクエストし、その後、ユーザーが最初の再生リストを保存する準備ができたときに、Google ドライブの権限のみをリクエストできます。
ユーザーがログインしていない疑いがある場合に、この技法を使うのも一手です。アプリのユーザー認証の画面が表示されると、新規ユーザーは圧倒されるでしょうし、認証を求められることに対してユーザーが混乱する可能性もあるからです。以下の手順はウェブ向けで、クライアントサイドのログインボタンを追加する手順(Google 2.0 ログインボタンを作成する)から派生しています。ウェブの増分承認の詳細については、OAuth 2.0 ドキュメントをご覧ください。
スコープの追加をリクエストする
ログイン時に、アプリはログイン スコープ profile
と、アプリの動作に必要なその他の初期スコープで構成される「ベース」スコープをリクエストします。後で、ユーザーが追加のスコープを必要とするアクションを実行すると、アプリは追加のスコープをリクエストし、ユーザーは同意画面から新しいスコープのみを承認します。
ステップ 1: ベーススコープをリクエストする
Google ログインを初期化するときに、ベーススコープ profile
をリクエストします。この手順は、Google 2.0 ログインボタンを作成するに記載されています。
auth2 = gapi.auth2.init({
client_id: 'CLIENT_ID.apps.googleusercontent.com',
cookiepolicy: 'single_host_origin', /** Default value **/
scope: 'profile' }); /** Base scope **/
ステップ 2: 追加のスコープをリクエストする
追加のスコープが必要な場合は、追加するスコープを使用してオプション ビルダーを作成し、user.grant({scope:
[OPTIONS BUILDER]}).then(successFunction, failFunction);
を呼び出してリクエストします。
const options = new gapi.auth2.SigninOptionsBuilder();
options.setScope('email https://www.googleapis.com/auth/drive');
googleUser = auth2.currentUser.get();
googleUser.grant(options).then(
function(success){
console.log(JSON.stringify({message: "success", value: success}));
},
function(fail){
alert(JSON.stringify({message: "fail", value: fail}));
});