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