追加の権限をリクエストする

ユーザーデータやその他のリソースにアクセスするユーザー権限をリクエストする場合、段階的な認可を使用して、最初のリクエスト内のすべてのスコープを事前にリクエストするか、必要に応じてスコープをリクエストできます。段階的な認可を使用すると、アプリはまずアプリの起動に必要なスコープのみをリクエストします。次に、新しい権限が必要になったときに追加のスコープをリクエストします。これは、ユーザーにリクエストする理由を特定するコンテキストで行われます。

たとえば、アプリでユーザーが音楽のプレイリストを 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 option = new gapi.auth2.SigninOptionsBuilder();
option.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}));
    });