2017-04-27 127 views
0

我在我的網站中使用Google登錄按鈕。我可以授權用戶並獲取用戶的個人資料信息。使用Google登錄按鈕時的額外權限

我跟了這Integrating Google Sign-In into your web app

<div id="my-signin2" ></div> 

gapi.signin2.render('my-signin2', { 
      'scope': 'profile email', 
      'width': 240, 
      'height': 50, 
      'longtitle': true, 
      'theme': 'light', 
      'onsuccess': this.onSuccess, 
      'onfailure': this.onFailure 
     }); 

     onSuccess(googleUser) { 
       var id_token = googleUser.getAuthResponse().id_token; 
       var name = googleUser.getBasicProfile().getName()); 
       var email = googleUser.getBasicProfile().getEmail()); 
       var imageUrl = googleUser.getBasicProfile().getImageUrl()); 

     } 
     onFailure(error) { 
     } 

現在我需要,而他授權使用谷歌閱讀用戶的聯繫人。

所以對於獲得接觸我添加了一個範圍

https://www.googleapis.com/auth/contacts.readonly

 gapi.signin2.render('my-signin2', { 
      'scope': 'profile email https://www.googleapis.com/auth/contacts.readonly', 
      'width': 240, 
      'height': 50, 
      'longtitle': true, 
      'theme': 'light', 
      'onsuccess': this.onSuccess, 
      'onfailure': this.onFailure 
     }); 

每一件事情是工作的罰款。在用戶授權使用gmail後,它向用戶顯示權限屏幕並請求權限。

但是,當用戶拒絕權限,它甚至不記錄用戶。即使他拒絕,我也希望用戶能夠登錄,如果我沒有得到他們的聯繫人,我的用戶也可以登錄。

我看了一下requesting additional scopes.

 var options = new gapi.auth2.SigninOptionsBuilder(
       {'scope': 'https://www.googleapis.com/auth/contacts.readonly'}); 

     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})); 
      }); 

當我在這的onSuccess後使用(用戶授權電子郵件後),它總是進入失敗的方法。給錯誤 「popup_closed_by_user

回答

0

按討論這個thread

找到了解決辦法。

創建了另一個用於請求附加範圍的按鈕,並稱爲授予方法onClick按鈕。

如果設置這樣的選項時,它是不工作

var options = new gapi.auth2.SigninOptionsBuilder(
      {'scope': 'https://www.googleapis.com/auth/contacts.readonly'}); 

用於獲取範圍,你應該使用的方法

let googleUser = auth2.currentUser.get(); 

var options = new gapi.auth2.SigninOptionsBuilder(); 
options.setScope('https://www.googleapis.com/auth/contacts.readonly'); 


googleUser.grant(options).then(
     function(success){ 
      console.log(JSON.stringify({message: "success", value: success})); 
     }, 
     function(fail){ 
      alert(JSON.stringify({message: "fail", value: fail})); 
}); 
相關問題