gpt4 book ai didi

javascript - 如何在没有登录按钮的情况下初始化 Google 登录?

转载 作者:数据小太阳 更新时间:2023-10-29 05:54:17 25 4
gpt4 key购买 nike

下面的代码作为一个使用 Google sign in 的简单测试页面:

<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",或者完全删除按钮,不仅按钮会消失,整个登录库也会停止工作 - 我得到一个未捕获的异常:

Cannot read property 'init' of undefined

当我尝试调用 gapi.auth2.init 并且用户未登录时。似乎 auth 库依赖于 dom 中存在的按钮进行初始化。

我计划将其合并到我的 Angular 应用程序中,该应用程序将在任何按钮出现在舞台上之前初始化服务中的 auth 库。如果用户已经登录,则不会出现登录按钮。根据这里的行为,如果 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
  • 按钮资源不会自动加载,bring yours
  • 如果你想利用小部件,你必须使用 platform.js.signin2 命名空间,但这是另一种方法,我不会在这里讨论。

关于javascript - 如何在没有登录按钮的情况下初始化 Google 登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35983551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com