如何在没有登录按钮的情况下初始化谷歌登录
How do I initialise Google Sign in with no login button?
以下代码用作使用Google登录的简单测试页面:
<html lang="en">
<head>
<script type="text/javascript">
function onGapiLoaded() {
auth = gapi.auth2.init({
client_id: "REPLACE_WITH_YOUR_ID",
scope: "profile email"
});
console.log( "signed in: " + auth.isSignedIn.get() );
auth.isSignedIn.listen( function(signedIn){ console.log( "signedin: " + signedIn ) } );
gapi.signin2.render( "signInButton", {
'width': 230,
'height': 50,
'longtitle': true,
'theme': 'dark',
'onsuccess': onSignIn
} );
}
function onSignIn(googleUser) {
// Useful data for your client-side scripts:
var profile = googleUser.getBasicProfile();
console.log("Name: " + profile.getName());
};
</script>
<script src="https://apis.google.com/js/platform.js?onload=onGapiLoaded" async defer></script>
</head>
<body>
<div id="signInButton" class="g-signin2"></div>
</body>
</html>
但是,如果我从登录按钮中删除class="g-signin2"
,或者完全删除按钮,不仅按钮消失,而且整个登录库停止工作 - 我得到一个未捕获的异常:
无法读取未定义的属性"init"
当我尝试调用gapi.auth2.init
并且用户未登录时。身份验证库似乎依赖于 dom 中存在的按钮来初始化。
我计划将其合并到我的 Angular 应用程序中,该应用程序将在舞台上出现任何按钮之前初始化服务中的身份验证库。如果用户已登录,则不会出现登录按钮。根据这里的行为,如果没有 DOM 中的按钮,我将无法使用这个库,这似乎相当狭窄。
为了使用.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>
有几点需要注意:
- 加载
api.js
而不是platform.js
- 按钮资源不会自动加载,请带上您的
- 如果你想利用小部件,你必须使用
platform.js
和.signin2
命名空间,但这是我不会在这里讨论的另一种方法。
不要取出class="g-signin2"
,而是向其添加style="display:none;"
,并在函数onSignIn上隐藏按钮(如果可见),使用新功能onFailedSignIn添加一个'onfailure': onFailedSignIn
gapi.signin2.render
,如果按钮隐藏,则显示按钮。
这样,您就不会破坏Google隐藏的任何默认功能,但仍然可以获得在用户进行身份验证时隐藏按钮并在用户未进行身份验证时显示按钮的功能。
相关文章:
- (Ajax)在不重新加载内容的情况下登录页面url
- 如何在没有登录按钮的情况下初始化谷歌登录
- 如何在用户使用护照登录的情况下测试帆.js控制器.js
- 检测脸书用户是否在没有弹出窗口的情况下登录
- 如何在没有登录PHP的情况下停止直接访问页面
- 网站似乎在没有向服务器发送密码的情况下登录用户;这是怎么回事
- Firebase身份验证服务-在不登录的情况下从电子邮件中查找uid
- 你可以在没有登录系统的情况下在Meteor中列出用户吗
- 在不刷新页面的情况下触发每个auth登录过程(facebookauth)
- 在不使用数据库的情况下登录网站
- 在没有重新登录的情况下从Parse.com更新数据
- 我可以在某些情况下禁用Facebook登录按钮吗?
- 如何在不刷新页面的情况下使用ajax制作登录系统
- Rails / JS - G+登录按钮只在页面重新加载后在某些情况下工作
- 网站如何在不重新加载页面的情况下检查登录凭据?
- 在没有facebook登录的情况下对facebook用户进行身份验证
- 我可以在不登录的情况下获得纯JavaScript的Facebook墙帖子吗
- 如何在不必连接后端的情况下创建登录和注册页面(ReactJS+Redux)
- 如何在不使用ActiveX控件的情况下从应用程序获取当前登录的用户名
- 是否可以在没有登录流的情况下使用Protractor测试流?