Integrating Google Sign-In using listeners

Listeners provide a way to automatically respond to changes in the current user's Sign-In session. For example, after your startup method initializes the Google Sign-In auth2 object, you can set up listeners to respond to events like auth2.isSignedIn state changes, or changes in auth2.currentUser .

The following code demonstrates using the 2.0 client method listen() to respond to changes in auth2.isSignedIn and auth2.currentUser .

  var 
  
 auth2 
 ; 
  
 // 
  
 The 
  
 Sign 
 - 
 In 
  
 object 
 . 
 var 
  
 googleUser 
 ; 
  
 // 
  
 The 
  
 current 
  
 user 
 . 
 /** 
  
 * 
  
 Calls 
  
 startAuth 
  
 after 
  
 Sign 
  
 in 
  
 V2 
  
 finishes 
  
 setting 
  
 up 
 . 
  
 */ 
 var 
  
 appStart 
  
 = 
  
 function 
 () 
  
 { 
  
 gapi 
 . 
 load 
 ( 
 'auth2' 
 , 
  
 initSigninV2 
 ); 
 }; 
 /** 
  
 * 
  
 Initializes 
  
 Signin 
  
 v2 
  
 and 
  
 sets 
  
 up 
  
 listeners 
 . 
  
 */ 
 var 
  
 initSigninV2 
  
 = 
  
 function 
 () 
  
 { 
  
 auth2 
  
 = 
  
 gapi 
 . 
 auth2 
 . 
 init 
 ({ 
  
 client_id 
 : 
  
 'CLIENT_ID.apps.googleusercontent.com' 
 , 
  
 scope 
 : 
  
 'profile' 
  
 }); 
  
 // 
  
 Listen 
  
 for 
  
 sign 
 - 
 in 
  
 state 
  
 changes 
 . 
  
 auth2 
 . 
 isSignedIn 
 . 
 listen 
 ( 
 signinChanged 
 ); 
  
 // 
  
 Listen 
  
 for 
  
 changes 
  
 to 
  
 current 
  
 user 
 . 
  
 auth2 
 . 
 currentUser 
 . 
 listen 
 ( 
 userChanged 
 ); 
  
 // 
  
 Sign 
  
 in 
  
 the 
  
 user 
  
 if 
  
 they 
  
 are 
  
 currently 
  
 signed 
  
 in 
 . 
  
 if 
  
 ( 
 auth2 
 . 
 isSignedIn 
 . 
 get 
 () 
  
 == 
  
 true 
 ) 
  
 { 
  
 auth2 
 . 
 signIn 
 (); 
  
 } 
  
 // 
  
 Start 
  
 with 
  
 the 
  
 current 
  
 live 
  
 values 
 . 
  
 refreshValues 
 (); 
 }; 
 /** 
  
 * 
  
 Listener 
  
 method 
  
 for 
  
 sign 
 - 
 out 
  
 live 
  
 value 
 . 
  
 * 
  
 * 
  
 @ 
 param 
  
 { 
 boolean 
 } 
  
 val 
  
 the 
  
 updated 
  
 signed 
  
 out 
  
 state 
 . 
  
 */ 
 var 
  
 signinChanged 
  
 = 
  
 function 
  
 ( 
 val 
 ) 
  
 { 
  
 console 
 . 
 log 
 ( 
 'Signin state changed to ' 
 , 
  
 val 
 ); 
  
 document 
 . 
 getElementById 
 ( 
 'signed-in-cell' 
 ) 
 . 
 innerText 
  
 = 
  
 val 
 ; 
 }; 
 /** 
  
 * 
  
 Listener 
  
 method 
  
 for 
  
 when 
  
 the 
  
 user 
  
 changes 
 . 
  
 * 
  
 * 
  
 @ 
 param 
  
 { 
 GoogleUser 
 } 
  
 user 
  
 the 
  
 updated 
  
 user 
 . 
  
 */ 
 var 
  
 userChanged 
  
 = 
  
 function 
  
 ( 
 user 
 ) 
  
 { 
  
 console 
 . 
 log 
 ( 
 'User now: ' 
 , 
  
 user 
 ); 
  
 googleUser 
  
 = 
  
 user 
 ; 
  
 updateGoogleUser 
 (); 
  
 document 
 . 
 getElementById 
 ( 
 'curr-user-cell' 
 ) 
 . 
 innerText 
  
 = 
  
 JSON 
 . 
 stringify 
 ( 
 user 
 , 
  
 undefined 
 , 
  
 2 
 ); 
 }; 
 /** 
  
 * 
  
 Updates 
  
 the 
  
 properties 
  
 in 
  
 the 
  
 Google 
  
 User 
  
 table 
  
 using 
  
 the 
  
 current 
  
 user 
 . 
  
 */ 
 var 
  
 updateGoogleUser 
  
 = 
  
 function 
  
 () 
  
 { 
  
 if 
  
 ( 
 googleUser 
 ) 
  
 { 
  
 document 
 . 
 getElementById 
 ( 
 'user-id' 
 ) 
 . 
 innerText 
  
 = 
  
 googleUser 
 . 
 getId 
 (); 
  
 document 
 . 
 getElementById 
 ( 
 'user-scopes' 
 ) 
 . 
 innerText 
  
 = 
  
 googleUser 
 . 
 getGrantedScopes 
 (); 
  
 document 
 . 
 getElementById 
 ( 
 'auth-response' 
 ) 
 . 
 innerText 
  
 = 
  
 JSON 
 . 
 stringify 
 ( 
 googleUser 
 . 
 getAuthResponse 
 (), 
  
 undefined 
 , 
  
 2 
 ); 
  
 } 
  
 else 
  
 { 
  
 document 
 . 
 getElementById 
 ( 
 'user-id' 
 ) 
 . 
 innerText 
  
 = 
  
 '--' 
 ; 
  
 document 
 . 
 getElementById 
 ( 
 'user-scopes' 
 ) 
 . 
 innerText 
  
 = 
  
 '--' 
 ; 
  
 document 
 . 
 getElementById 
 ( 
 'auth-response' 
 ) 
 . 
 innerText 
  
 = 
  
 '--' 
 ; 
  
 } 
 }; 
 /** 
  
 * 
  
 Retrieves 
  
 the 
  
 current 
  
 user 
  
 and 
  
 signed 
  
 in 
  
 states 
  
 from 
  
 the 
  
 GoogleAuth 
  
 * 
  
 object 
 . 
  
 */ 
 var 
  
 refreshValues 
  
 = 
  
 function 
 () 
  
 { 
  
 if 
  
 ( 
 auth2 
 ){ 
  
 console 
 . 
 log 
 ( 
 'Refreshing values...' 
 ); 
  
 googleUser 
  
 = 
  
 auth2 
 . 
 currentUser 
 . 
 get 
 (); 
  
 document 
 . 
 getElementById 
 ( 
 'curr-user-cell' 
 ) 
 . 
 innerText 
  
 = 
  
 JSON 
 . 
 stringify 
 ( 
 googleUser 
 , 
  
 undefined 
 , 
  
 2 
 ); 
  
 document 
 . 
 getElementById 
 ( 
 'signed-in-cell' 
 ) 
 . 
 innerText 
  
 = 
  
 auth2 
 . 
 isSignedIn 
 . 
 get 
 (); 
  
 updateGoogleUser 
 (); 
  
 } 
 } 
 
Design a Mobile Site
View Site in Mobile | Classic
Share by: