2017-03-17 151 views
0

我正在将Google登录集成到我的网络应用中。我遵循here的指示。但是我无法从登录中获取任何用户信息。登录按钮虽然工作得很好。网络应用Google登录

<meta name="google-signin-client_id" content="3*****-c*******************.apps.googleusercontent.com"> 
<script src="https://apis.google.com/js/platform.js" async defer></script> 

<div class="g-signin2 googleSignIn" data-onsuccess="onSignIn"></div> 

我使用这些JavaScript函数:

if (auth2.isSignedIn.get()) { 
     var profile = auth2.currentUser.get().getBasicProfile(); 
     console.log('ID: ' + profile.getId()); 
     console.log('Full Name: ' + profile.getName()); 
     console.log('Given Name: ' + profile.getGivenName()); 
     console.log('Family Name: ' + profile.getFamilyName()); 
     console.log('Image URL: ' + profile.getImageUrl()); 
     console.log('Email: ' + profile.getEmail()); 
     email=profile.getEmail(); 
     } 
    } 

此功能将导致一个错误:auth2没有定义。 如果我在函数之前使用window.onLoadCallback = function(),那么它在日志中不会发生错误,也不会发生任何错误。如果我只用这个代替:

function onSignIn(googleUser) { 
     var id_token = googleUser.getAuthResponse().id_token; 
     console.log("done"); 
    } 

再次我得到没有错误,但也没有在控制台日志中。

回答

0

将此代码放在if(auth2.isSignedIn.get())之前。尝试运行它。

gapi.load('auth2', function() { 
    auth2 = gapi.auth2.init(); 

    // Sign the user in, and then retrieve their ID. 
    auth2.signIn().then(function() { 
     console.log(auth2.currentUser.get().getId()); 
    }); 
}); 
+1

这个错误,现在来了:'未捕获的对象{错误:“popup_closed_by_user”}' 我不关闭任何弹出窗口。只要点击Google登录按钮后弹出窗口登录到我的帐户,就会发生错误。如果我已经登录,那么一旦我加载页面,错误就会出现。 –

+0

嘿!它适用于我允许弹出式窗口。但是用户的浏览器默认不会启用此功能。现在,只要页面加载而没有点击登录按钮,登录弹出即会出现。 –

+0

调用'auth2.signIn()'将加载当前会话或弹出选择账户屏幕(如果不存在按设计的会话)。您可以在调用signIn()之前检查会话是否存在,以避免弹出:'if(auth2.isSignedIn.get()){auth2.signIn(); }'。也就是说,如果它存在,加载会话,否则,延迟调用'signIn()'直到必要。 –