PHP 项目 google API 和 javascript:继承的混乱
PHP project with google API and javascript: Inherited Mess
所以我继承了用户 php 的一些工作项目。我没有使用 php 的经验,所以当然一直在努力解决我们发现的问题。在这一点上,我只是想获取访问该站点时碰巧登录的人的 google id。奇怪的是,有时我的代码工作得很好,我得到了 google id,但它只对我们尝试过的一些帐户有效,其他的只是 return null。下面的代码我只是想弄清楚谁是正确登录的,但我对这一切是如何工作的一无所知,所以我不知道哪里出了问题。
<!DOCTYPE html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Career Opportunities</title>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="https://apis.google.com/js/client:platform.js"></script>
<script type="text/javascript">
function startUp(onSuccess, onFailure) {
gapi.client.init({
apiKey: 'API KEY',
clientId: 'CLIENTID.apps.googleusercontent.com',
scope: 'profile',
}).then(function() {
var x = gapi.auth2.getAuthInstance();
console.log("gapi.auth2.getAuthInstance() : " + x);
console.log("userId is : " + x.currentUser.get().getId());
gapi.client.load('people', 'v1', function() {
var request = gapi.client.people.people.get({
'resourceName': 'people/me',
'requestMask.includeField': 'person.phone_numbers,person.organizations,person.email_addresses,person.names'
});
console.log('request: ' + request);
request.execute(function(resp) {
console.log(resp);
});
});
});
}
gapi.load('client', startUp);
</script>
<script src="js/validation.js" async defer></script>
</head>
<body>
</body>
</html>
这是我出于某种原因不喜欢用户时收到的错误。编辑:此错误在控制台中。这个页面什么都不做,只是告诉我谁通过 console.log 登录了。
代码:401
数据:未定义
错误:{代码:401,数据:未定义,消息:"The request does not have valid authentication credentials."}
留言:"The request does not have valid authentication credentials."
原型:对象
我已经尝试了很多不同的东西,我认为这段代码将是一堆不同方法的集合,抱歉,哈哈。
编辑- 添加更多 console.logs - 编辑以上代码以反映这一点
bobtest.php:101 gapi.auth2.getAuthInstance() : [object Object]
bobtest.php:102 userId is : null
bobtest.php:108 request: [object Object]
cb=gapi.loaded_0:148 GET https://content-people.googleapis.com/v1/people/me?requestMask.includeField=person.phone_numbers&key=401 ()
zu @ cb=gapi.loaded_0:148
n @ cb=gapi.loaded_0:148
Cu @ cb=gapi.loaded_0:149
(anonymous) @ cb=gapi.loaded_0:149
g @ cb=gapi.loaded_0:123
c @ cb=gapi.loaded_0:119
postMessage (async)
(anonymous) @ cb=gapi.loaded_0:122
setTimeout (async)
call @ cb=gapi.loaded_0:122
call @ cb=gapi.loaded_0:134
l @ cb=gapi.loaded_0:195
(anonymous) @ cb=gapi.loaded_0:194
g @ cb=gapi.loaded_0:126
c @ cb=gapi.loaded_0:122
postMessage (async)
(anonymous) @ cb=gapi.loaded_0:119
setTimeout (async)
call @ cb=gapi.loaded_0:119
call @ cb=gapi.loaded_0:131
_.Xj.Rl @ cb=gapi.loaded_0:149
_.Xj.kc @ cb=gapi.loaded_0:149
window.startup @ proxy.html?usegapi=1&jsh=m%3B%2F_%2Fscs%2Fapps-static%2F_%2Fjs%2Fk%3Doz.gapi.en.tZDXb_qbHrc.O%2Fm%3D__features__%2Fam%3DAQ%2Frt%3Dj%2Fd%3D1%2Frs%:8
(anonymous) @ googleapis.proxy.js?onload=startup:10
ba @ googleapis.proxy.js?onload=startup:3
b @ googleapis.proxy.js?onload=startup:10
Y.r.(anonymous function) @ googleapis.proxy.js?onload=startup:10
Y.x.(anonymous function) @ googleapis.proxy.js?onload=startup:11
(anonymous) @ cb=gapi.loaded_0:1
bobtest.php:110 {code: 401, data: undefined, message: "The request does not have valid authentication credentials.", error: {…}}
编辑 3 添加更多 console.logs
----STARTING CLIENT.INIT
bobtest.php:101 ----CLIENT.INIT SUCCESSFUL
bobtest.php:103 gapi.auth2.getAuthInstance() : [object Object]
bobtest.php:104 userId is : null
bobtest.php:110 ----CLIENT.LOAD SUCCESSFUL
bobtest.php:111 request: [object Object]
cb=gapi.loaded_0:148 GET https://content-people.googleapis.com/v1/people/me?requestMask.includeField=person.phone_numbers%2Cperson.organizations%2Cperson.email_addresses%2Cperson.names&key=AIzaSyATLxJElwrDoYaBJtcWCOOP4JI7CUKlXUk 401 ()
zu @ cb=gapi.loaded_0:148
n @ cb=gapi.loaded_0:148
Cu @ cb=gapi.loaded_0:149
(anonymous) @ cb=gapi.loaded_0:149
g @ cb=gapi.loaded_0:123
c @ cb=gapi.loaded_0:119
postMessage (async)
(anonymous) @ cb=gapi.loaded_0:122
setTimeout (async)
call @ cb=gapi.loaded_0:122
call @ cb=gapi.loaded_0:134
l @ cb=gapi.loaded_0:195
(anonymous) @ cb=gapi.loaded_0:194
g @ cb=gapi.loaded_0:126
c @ cb=gapi.loaded_0:122
postMessage (async)
(anonymous) @ cb=gapi.loaded_0:119
setTimeout (async)
call @ cb=gapi.loaded_0:119
call @ cb=gapi.loaded_0:131
_.Xj.Rl @ cb=gapi.loaded_0:149
_.Xj.kc @ cb=gapi.loaded_0:149
window.startup @ proxy.html?usegapi=1&jsh=m%3B%2F_%2Fscs%2Fapps-static%2F_%2Fjs%2Fk%3Doz.gapi.en.tZDXb_qbHrc.O%2Fm%3D__features__%2Fam%3DAQ%2Frt%3Dj%2Fd%3D1%2Frs%3DAGLTcCOgQjGru3ruZo70XwAerRmnfOfOeA:8
(anonymous) @ googleapis.proxy.js?onload=startup:10
ba @ googleapis.proxy.js?onload=startup:3
b @ googleapis.proxy.js?onload=startup:10
Y.r.(anonymous function) @ googleapis.proxy.js?onload=startup:10
Y.x.(anonymous function) @ googleapis.proxy.js?onload=startup:11
(anonymous) @ cb=gapi.loaded_0:1
bobtest.php:113 ----REQUEST.EXECUTE CALLBACK
bobtest.php:114 {code: 401, data: undefined, message: "The request does not have valid authentication credentials.", error: {…}}
编辑 4 添加了成功的控制台日志
----STARTING CLIENT.INIT
bobtest.php:101 ----CLIENT.INIT SUCCESSFUL
bobtest.php:103 gapi.auth2.getAuthInstance() : [object Object]
bobtest.php:104 userId is : 9999(actually shows id, just removed just in case)
bobtest.php:110 ----CLIENT.LOAD SUCCESSFUL
bobtest.php:111 request: [object Object]
bobtest.php:113 ----REQUEST.EXECUTE CALLBACK
bobtest.php:114 {resourceName: "people/9999999", etag: "%999999=", names: Array(1), emailAddresses: Array(1), result: {…}}
我不会继续评论,而是会在此处提出一些建议并在您编辑问题时进行编辑。
首先,请将控制台的输出复制到您的问题中。这将帮助我们了解到目前为止代码中发生了什么。
编辑 4:
我不熟悉你正在使用的 google apis,所以我最好的建议是测试这段代码,如果它 returns 登录 = true有时是错误的,有时是错误的,使用这个简化的代码在 Whosebug 上提出一个新问题。用 javascript 和 google api 标记它(无论它的主要标记是什么)。查看像 这样的答案,您的代码就大不相同了。所以我现在的猜测是,您进行的 api 调用需要 rewritten/aren 未按正确顺序调用。但是试试这个简化的代码,它有时显示登录,有时不显示吗?如果是这样,那么我们已经缩小了问题的范围,足以让您提出问题并可能从真正熟悉 google api 的人那里得到答复。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Career Opportunities</title>
<script src="https://apis.google.com/js/client:platform.js"></script>
<script type="text/javascript">
$(document).ready(function() {
gapi.load('client', startUp);
function startUp(onSuccess, onFailure) {
gapi.client.init({
apiKey: 'API KEY',
clientId: 'CLIENTID.apps.googleusercontent.com',
scope: 'profile',
}).then(function() {
// here we log whether the user is signed in or not, and it changes unexpectedly
var x = gapi.auth2.getAuthInstance();
console.log(x.isSignedIn.get());
});
}
});
</script>
</head>
<body>
</body>
</html>
我并没有真正找到这个答案,我的同事找到了,但我想我应该 post 我们最终开始工作的东西。
gapi.auth.authorize({
'client_id': myClientId,
'scope': 'email',
'immediate': true
}, function(authResult) {
if (authResult['status']['signed_in']) {
// Update the app to reflect a signed in user
gapi.client.load('plus','v1', function(){
var request = gapi.client.plus.people.get({'userId': 'me'});
request.execute(function(resp) {
var userId = '<?php echo $_SESSION["userID"]; ?>';
if(userId == resp.id) {
onSuccess();
}
else {
onFailure();
}
});
});
}
else {
onFailure();
}
});
所以我继承了用户 php 的一些工作项目。我没有使用 php 的经验,所以当然一直在努力解决我们发现的问题。在这一点上,我只是想获取访问该站点时碰巧登录的人的 google id。奇怪的是,有时我的代码工作得很好,我得到了 google id,但它只对我们尝试过的一些帐户有效,其他的只是 return null。下面的代码我只是想弄清楚谁是正确登录的,但我对这一切是如何工作的一无所知,所以我不知道哪里出了问题。
<!DOCTYPE html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Career Opportunities</title>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="https://apis.google.com/js/client:platform.js"></script>
<script type="text/javascript">
function startUp(onSuccess, onFailure) {
gapi.client.init({
apiKey: 'API KEY',
clientId: 'CLIENTID.apps.googleusercontent.com',
scope: 'profile',
}).then(function() {
var x = gapi.auth2.getAuthInstance();
console.log("gapi.auth2.getAuthInstance() : " + x);
console.log("userId is : " + x.currentUser.get().getId());
gapi.client.load('people', 'v1', function() {
var request = gapi.client.people.people.get({
'resourceName': 'people/me',
'requestMask.includeField': 'person.phone_numbers,person.organizations,person.email_addresses,person.names'
});
console.log('request: ' + request);
request.execute(function(resp) {
console.log(resp);
});
});
});
}
gapi.load('client', startUp);
</script>
<script src="js/validation.js" async defer></script>
</head>
<body>
</body>
</html>
这是我出于某种原因不喜欢用户时收到的错误。编辑:此错误在控制台中。这个页面什么都不做,只是告诉我谁通过 console.log 登录了。
代码:401
数据:未定义
错误:{代码:401,数据:未定义,消息:"The request does not have valid authentication credentials."}
留言:"The request does not have valid authentication credentials."
原型:对象
我已经尝试了很多不同的东西,我认为这段代码将是一堆不同方法的集合,抱歉,哈哈。
编辑- 添加更多 console.logs - 编辑以上代码以反映这一点
bobtest.php:101 gapi.auth2.getAuthInstance() : [object Object]
bobtest.php:102 userId is : null
bobtest.php:108 request: [object Object]
cb=gapi.loaded_0:148 GET https://content-people.googleapis.com/v1/people/me?requestMask.includeField=person.phone_numbers&key=401 ()
zu @ cb=gapi.loaded_0:148
n @ cb=gapi.loaded_0:148
Cu @ cb=gapi.loaded_0:149
(anonymous) @ cb=gapi.loaded_0:149
g @ cb=gapi.loaded_0:123
c @ cb=gapi.loaded_0:119
postMessage (async)
(anonymous) @ cb=gapi.loaded_0:122
setTimeout (async)
call @ cb=gapi.loaded_0:122
call @ cb=gapi.loaded_0:134
l @ cb=gapi.loaded_0:195
(anonymous) @ cb=gapi.loaded_0:194
g @ cb=gapi.loaded_0:126
c @ cb=gapi.loaded_0:122
postMessage (async)
(anonymous) @ cb=gapi.loaded_0:119
setTimeout (async)
call @ cb=gapi.loaded_0:119
call @ cb=gapi.loaded_0:131
_.Xj.Rl @ cb=gapi.loaded_0:149
_.Xj.kc @ cb=gapi.loaded_0:149
window.startup @ proxy.html?usegapi=1&jsh=m%3B%2F_%2Fscs%2Fapps-static%2F_%2Fjs%2Fk%3Doz.gapi.en.tZDXb_qbHrc.O%2Fm%3D__features__%2Fam%3DAQ%2Frt%3Dj%2Fd%3D1%2Frs%:8
(anonymous) @ googleapis.proxy.js?onload=startup:10
ba @ googleapis.proxy.js?onload=startup:3
b @ googleapis.proxy.js?onload=startup:10
Y.r.(anonymous function) @ googleapis.proxy.js?onload=startup:10
Y.x.(anonymous function) @ googleapis.proxy.js?onload=startup:11
(anonymous) @ cb=gapi.loaded_0:1
bobtest.php:110 {code: 401, data: undefined, message: "The request does not have valid authentication credentials.", error: {…}}
编辑 3 添加更多 console.logs
----STARTING CLIENT.INIT
bobtest.php:101 ----CLIENT.INIT SUCCESSFUL
bobtest.php:103 gapi.auth2.getAuthInstance() : [object Object]
bobtest.php:104 userId is : null
bobtest.php:110 ----CLIENT.LOAD SUCCESSFUL
bobtest.php:111 request: [object Object]
cb=gapi.loaded_0:148 GET https://content-people.googleapis.com/v1/people/me?requestMask.includeField=person.phone_numbers%2Cperson.organizations%2Cperson.email_addresses%2Cperson.names&key=AIzaSyATLxJElwrDoYaBJtcWCOOP4JI7CUKlXUk 401 ()
zu @ cb=gapi.loaded_0:148
n @ cb=gapi.loaded_0:148
Cu @ cb=gapi.loaded_0:149
(anonymous) @ cb=gapi.loaded_0:149
g @ cb=gapi.loaded_0:123
c @ cb=gapi.loaded_0:119
postMessage (async)
(anonymous) @ cb=gapi.loaded_0:122
setTimeout (async)
call @ cb=gapi.loaded_0:122
call @ cb=gapi.loaded_0:134
l @ cb=gapi.loaded_0:195
(anonymous) @ cb=gapi.loaded_0:194
g @ cb=gapi.loaded_0:126
c @ cb=gapi.loaded_0:122
postMessage (async)
(anonymous) @ cb=gapi.loaded_0:119
setTimeout (async)
call @ cb=gapi.loaded_0:119
call @ cb=gapi.loaded_0:131
_.Xj.Rl @ cb=gapi.loaded_0:149
_.Xj.kc @ cb=gapi.loaded_0:149
window.startup @ proxy.html?usegapi=1&jsh=m%3B%2F_%2Fscs%2Fapps-static%2F_%2Fjs%2Fk%3Doz.gapi.en.tZDXb_qbHrc.O%2Fm%3D__features__%2Fam%3DAQ%2Frt%3Dj%2Fd%3D1%2Frs%3DAGLTcCOgQjGru3ruZo70XwAerRmnfOfOeA:8
(anonymous) @ googleapis.proxy.js?onload=startup:10
ba @ googleapis.proxy.js?onload=startup:3
b @ googleapis.proxy.js?onload=startup:10
Y.r.(anonymous function) @ googleapis.proxy.js?onload=startup:10
Y.x.(anonymous function) @ googleapis.proxy.js?onload=startup:11
(anonymous) @ cb=gapi.loaded_0:1
bobtest.php:113 ----REQUEST.EXECUTE CALLBACK
bobtest.php:114 {code: 401, data: undefined, message: "The request does not have valid authentication credentials.", error: {…}}
编辑 4 添加了成功的控制台日志
----STARTING CLIENT.INIT
bobtest.php:101 ----CLIENT.INIT SUCCESSFUL
bobtest.php:103 gapi.auth2.getAuthInstance() : [object Object]
bobtest.php:104 userId is : 9999(actually shows id, just removed just in case)
bobtest.php:110 ----CLIENT.LOAD SUCCESSFUL
bobtest.php:111 request: [object Object]
bobtest.php:113 ----REQUEST.EXECUTE CALLBACK
bobtest.php:114 {resourceName: "people/9999999", etag: "%999999=", names: Array(1), emailAddresses: Array(1), result: {…}}
我不会继续评论,而是会在此处提出一些建议并在您编辑问题时进行编辑。
首先,请将控制台的输出复制到您的问题中。这将帮助我们了解到目前为止代码中发生了什么。
编辑 4:
我不熟悉你正在使用的 google apis,所以我最好的建议是测试这段代码,如果它 returns 登录 = true有时是错误的,有时是错误的,使用这个简化的代码在 Whosebug 上提出一个新问题。用 javascript 和 google api 标记它(无论它的主要标记是什么)。查看像
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Career Opportunities</title>
<script src="https://apis.google.com/js/client:platform.js"></script>
<script type="text/javascript">
$(document).ready(function() {
gapi.load('client', startUp);
function startUp(onSuccess, onFailure) {
gapi.client.init({
apiKey: 'API KEY',
clientId: 'CLIENTID.apps.googleusercontent.com',
scope: 'profile',
}).then(function() {
// here we log whether the user is signed in or not, and it changes unexpectedly
var x = gapi.auth2.getAuthInstance();
console.log(x.isSignedIn.get());
});
}
});
</script>
</head>
<body>
</body>
</html>
我并没有真正找到这个答案,我的同事找到了,但我想我应该 post 我们最终开始工作的东西。
gapi.auth.authorize({
'client_id': myClientId,
'scope': 'email',
'immediate': true
}, function(authResult) {
if (authResult['status']['signed_in']) {
// Update the app to reflect a signed in user
gapi.client.load('plus','v1', function(){
var request = gapi.client.plus.people.get({'userId': 'me'});
request.execute(function(resp) {
var userId = '<?php echo $_SESSION["userID"]; ?>';
if(userId == resp.id) {
onSuccess();
}
else {
onFailure();
}
});
});
}
else {
onFailure();
}
});