我正在尝试让google登录我的Intranet网站上的工作,该网站目前使用集成的Windows身份验证 - 我想摆脱它,因为我需要支持ChromeBooks,而且几乎所有这里都是google ......
这就是IS的工作:
XHR已完成加载:获取“https://accounts.google.com/o/oauth2/iframerpc?action=checkOrigin&origin=ht ... d = 777682448638-5tpyaddayaddyadddarvnbr3p6.apps.googleusercontent.com”。
如果我点击我未登录google的计算机上的按钮,我会立即提示登录谷歌。
如果我点击我登录谷歌但未访问此网站的计算机上的按钮,那么我将收到我的电子邮件和个人资料的授权请求,以便与我的网络应用程序共享。
什么不起作用:
这是我的代码的缩写版本 - 请注意,现在我的网站使用集成的Windows身份验证 - 这就是我想要移除的地方,因此我们可以使用ChromeBook和其他未使用我们的Windows登录的计算机
这是来自我的_Layout.cshtml页面
@{
var username = WebSecurity.CurrentUserName;
}
<!DOCTYPE html>
<html lang="en">
<head>
<title>Rutland City Public Schools - ACADEMIC SITE</title>
<link href="~/Styles/Styles.css" rel="stylesheet" type="text/css"/>
<link href="~/Styles/PrintStyles.css" rel="stylesheet" type="text/css" media="print"/>
<meta http-Equiv="Cache-Control" Content="no-cache">
<meta http-Equiv="Pragma" Content="no-cache">
<meta http-Equiv="Expires" Content="0">
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
@RenderSection("script", required: false)
<meta name="google-signin-scope" content="profile email">
<meta name="google-signin-client_id" content="777682448638-5tpyaddayaddayaddavnbr3p6.apps.googleusercontent.com">
</head>
<body>
<div id="topRight">
Hello: @username <br> <br>
<div id="my-signin2" align="center" ></div>
<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': 'https://www.googleapis.com/auth/plus.login',
'width': 150,
'height': 30,
'longtitle': true,
'theme': 'light',
'onsuccess': onSuccess,
'onfailure': 'oops!'
});
}
</script>
<script src="https://apis.google.com/js/platform.js?onload=renderButton" async defer></script>
ignore google button!
</div>
<div id="mainContent">
@RenderBody()
</div>
</body>
</html>
如果我在Chrome中打开“检查元素”,我可以看到它在网络选项卡下显然已经关闭,并且有些人会去谷歌。在控制台选项卡中,我只看到XHR已完成加载:获取“https://accounts.google .................”消息。
这里发生了什么?为什么我没有获得onSuccess?
谢谢!!!!
添加了更多注释:
我添加了一个链接:
<a href="#" onclick="signIn();">Sign in</a>
调用此函数:
function signIn() {
var auth2 = gapi.auth2.getAuthInstance();
console.log(auth2);
从控制台结果我可以看到我的网站和我的客户端ID,但我再一次看不到我的实际用户。
jF {zd: Object, po: "single_host_origin", zt: true, ha: true, G: undefined…}
B: bY
B: "777682448638-5tp3rss17g1qarc3em0opcr4rvnbr3p6.apps.googleusercontent.com"
Db: "http://rcps"
Ei: undefined
El: undefined
G: "google"
Ka: false
Ld: Object
openid.realm: undefined
redirect_uri: "http://rcps/academic/academic"
response_type: "token id_token"
scope: "openid profile email"
答案 0 :(得分:0)
使用Google Sign-In (gapi.auth2) JavaScript客户端库,您可能应该使用侦听器来检查客户端的状态。我不确定您是如何呈现按钮的,但您可能想要好好看一下Google Sign-in quickstart。
虽然我发现使用侦听器比使用成功回调更有优势,但以下代码适用于我(我在使用包含授权响应的onWin
变量登录时看到z
):
function onFail(z){ alert('Fail' + JSON.stringify(z)); }
function onWin(z){ alert('Win' + JSON.stringify(z)); }
gapi.load('auth2', function() {
gapi.signin2.render('signin-button', {
scope: 'https://www.googleapis.com/auth/plus.login',
onsuccess: onWin,
onfail: onFail,
fetch_basic_profile: false });
gapi.auth2.init({fetch_basic_profile: false,
scope:'https://www.googleapis.com/auth/plus.login'}).then(
function (){
console.log('init');
auth2 = gapi.auth2.getAuthInstance();
auth2.isSignedIn.listen(updateSignIn);
auth2.then(updateSignIn());
});
});
登录更改时执行操作(例如,显示/隐藏授权的用户界面):
var updateSignIn = function() {
console.log('update sign in state' + auth2.isSignedIn.get());
}
在auth2.isSignedIn.get()
返回true
时,您可以使用auth2.currentUser.get()
检索当前登录用户的个人资料数据。
答案 1 :(得分:0)
在localhost上测试时遇到了类似的问题。当我将代码推送到我的生产服务器上时,Google提供的简单示例与广告宣传完美。即使页面刷新后,按钮的值也会相应更改或保持不变。
答案 2 :(得分:0)
也许您的浏览器配置为阻止第三方Cookie。如果是,请禁用该功能。您可能还希望在登录页面上注明需要提供第三方cookie,以便您的用户知道这样做。