Javascript 在没有类的情况下使用google登录时,如何使用GoogleAuth.then();g-符号2“;div
根据对这一问题的回答,我有一段代码,它使用谷歌登录,而不使用带有Javascript 在没有类的情况下使用google登录时,如何使用GoogleAuth.then();g-符号2“;div,javascript,google-signin,Javascript,Google Signin,根据对这一问题的回答,我有一段代码,它使用谷歌登录,而不使用带有g-signn2样式的div: <html> <head> <meta name="google-signin-client_id" content="APP_CLIENT_ID"> </head> <body> <div id="my-signin2"></div> <a href="#" onclick="signOut();
g-signn2
样式的div:
<html>
<head>
<meta name="google-signin-client_id" content="APP_CLIENT_ID">
</head>
<body>
<div id="my-signin2"></div>
<a href="#" onclick="signOut();">Sign out</a>
<script>
function onSuccess(googleUser) {
console.log('Logged in as: ' + googleUser.getBasicProfile().getName());
}
function onFailure(error) {
console.log(error);
}
function renderButton() {
gapi.signin2.render('my-signin2', {
'scope': 'profile email',
'width': 240,
'height': 50,
'longtitle': true,
'theme': 'dark',
'onsuccess': onSuccess,
'onfailure': onFailure
});
}
function signOut() {
var auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function () {
console.log('User signed out.');
});
}
</script>
<script src="https://apis.google.com/js/platform.js?onload=renderButton" async defer></script>
</body>
</html>
函数onSuccess(谷歌用户){
log('登录身份:'+googleUser.getBasicProfile().getName());
}
功能失效(错误){
console.log(错误);
}
函数renderButton(){
gapi.signn2.render('my-signn2'{
“范围”:“配置文件电子邮件”,
“宽度”:240,
身高:50,,
"龙缇乐":对,,
“主题”:“黑暗”,
“onsuccess”:onsuccess,
“onfailure”:onfailure
});
}
函数签出(){
var auth2=gapi.auth2.getAuthInstance();
auth2.signOut().then(函数(){
log('User signed out');
});
}
但是,我想使用GoogleAuth.then(onInit,onFailure)
,这样我就可以知道lib初始化何时完成,并且我可以决定更新我的视图。我也无法添加任何侦听器,以便在登录完成时通知它们
问题是在使用上述代码或类引用创建按钮之前,gapi.auth2
是未定义的。似乎如果没有这两个步骤中的任何一个,我都无法调用gapi.auth2.getAuthInstance()
来设置侦听器,也无法得到一个承诺,通知我init何时完成
我的问题是,我想在创建按钮之前进行初始化,看看是否需要创建登录按钮。要获得
gapi.auth2
,首先需要加载它
gapi.load('auth2', function() {
// continuation
gapi.auth2.init();
});
platform.js基本上加载api.js+.signn2
名称空间.signin2
命名空间允许您呈现按钮和小部件。但如果您想要细粒度的控制,我不建议您使用它
.signn2
所做的是
- 检测类别
并渲染按钮g-signn2
- 渲染指定元素上的按钮
- 单击时调用登录
- 根据用户的登录状态,使用字符串呈现按钮
- 我在类似领域的另一个问题回答了这个问题:
答案是不使用platform.js,而是使用api.js并加载auth2:
<html lang="en">
<head>
<script src="https://apis.google.com/js/api.js"></script>
<script type="text/javascript">
function onSignIn(googleUser) {
console.log( "signedin");
// Useful data for your client-side scripts:
var profile = googleUser.getBasicProfile();
console.log("Name: " + profile.getName());
};
gapi.load('auth2', function() {
gapi.auth2.init({
client_id: "REPLACE_WITH_YOUR_ID",
scope: "profile email" // this isn't required
}).then(function(auth2) {
console.log( "signed in: " + auth2.isSignedIn.get() );
auth2.isSignedIn.listen(onSignIn);
var button = document.querySelector('#signInButton');
button.addEventListener('click', function() {
auth2.signIn();
});
});
});
</script>
</head>
<body>
<div id="signInButton"><img src="IMAGE_FILE" /></div>
</body>
</html>
函数onSignIn(谷歌用户){
控制台日志(“已签名”);
//客户端脚本的有用数据:
var profile=googleUser.getBasicProfile();
log(“Name:+profile.getName());
};
load('auth2',function(){
gapi.auth2.init({
客户id:“用您的id替换”,
范围:“配置文件电子邮件”//这不是必需的
}).then(函数(auth2){
log(“登录:+auth2.isSignedIn.get());
auth2.isSignedIn.listen(onSignIn);
var按钮=document.querySelector('signInButton');
addEventListener('click',function(){
auth2.signIn();
});
});
});