要求使用者存取使用者資料或其他資源的權限時,您可以使用漸進式授權,在初始要求中預先要求所有範圍,或只在需要時要求範圍。使用漸進式授權時,應用程式一開始只會要求啟動應用程式所需的範圍,然後在向使用者提出要求的原因中,要求額外的範圍,以便取得新權限。
舉例來說,假設您的應用程式可讓使用者將音樂播放清單儲存到 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}));
});