Javascript 为什么这里需要FB.getLoginStatus?
我一直致力于将Javascript 为什么这里需要FB.getLoginStatus?,javascript,facebook,facebook-graph-api,facebook-authentication,Javascript,Facebook,Facebook Graph Api,Facebook Authentication,我一直致力于将Facebook登录与我的网站整合,到目前为止,我大部分都取得了成功;然而,我仍然没有多少疑问 在我的主页上;我有一个按钮aa href,它将触发一个Javascript函数,用一个弹出窗口提示用户登录Facebook;如果是第一次,用户将收到另一个弹出窗口的提示,询问权限 用户登录(并接受权限)后;(s) 他将使用document.location.href重定向到另一个页面;到目前为止,一切都很顺利。但是,我接下来要做的是: 我想-在加载用户重定向到的页面时-显示欢迎消息(欢迎
Facebook登录
与我的网站整合,到目前为止,我大部分都取得了成功;然而,我仍然没有多少疑问
在我的主页上;我有一个按钮aa href
,它将触发一个Javascript函数,用一个弹出窗口提示用户登录Facebook;如果是第一次,用户将收到另一个弹出窗口的提示,询问权限
用户登录(并接受权限)后;(s) 他将使用document.location.href
重定向到另一个页面;到目前为止,一切都很顺利。但是,我接下来要做的是:
我想-在加载用户重定向到的页面时-显示欢迎消息(欢迎[电子邮件])-然后我想根据附加到用户名的一些数据库信息动态生成一些元素
我正试图用Javascript实现这一点:
<script>
$('document').ready(function(){
window.fbAsyncInit = function() {
FB.init({
appId : '[my app id]',
oauth : true,
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
$(document).trigger('fbload');
};
$(document).on('fbload', function(){
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
FB.api('/me', function(response) {
user_email = response.email; //get user email
// Here, I can display the welcome message :)
});
} else if (response.status === 'not_authorized') {
// the user is logged in to Facebook,
// but has not authenticated your app
} else {
// the user isn't logged in to Facebook.
}
});
});
});
</script>
我为用户电子邮件
获得以下输出:
未定义
我似乎无法理解其中的逻辑!因为FB.getLoginStatus
只检查用户是否登录;为什么它(或缺少它)会中断函数调用FB.api
如果有人能解释一下这里实际发生的事情的逻辑,我将不胜感激
注意:不管怎样,我最终可能会使用FB.getLoginStatus,但我主要关心发生的事情的逻辑 您的FB.api('/me',function(response){函数如果没有由FB.getLoginStatus(function(response){函数提供的活动访问令牌,将无法工作
通过将代码更改为以下内容,可以在浏览器控制台中看到:
$(document).on('fbload', function(){
FB.getLoginStatus(function(response) {
console.log(response); //CHANGE
FB.api('/me', function(response) {
user_email = response.email; //get user email
console.log(response); //CHANGE
});
});
});
这是因为FB.api('/me',函数(response){正在询问关于当前FB用户的各种数据(姓名、性别、家乡、教育程度、用户名、引号……),所以Facebook只是确保你让该用户登录到你的应用程序。但不是
user\u email=response中的response
。email
来自response
这里:FB.api('/me',函数(response).
?对不起,你完全正确。真正的答案是:你的FB.api('/me',函数(response){如果没有FB.getLoginStatus提供的活动访问令牌,则无法工作。您可以在浏览器控制台中通过使用:$(document).on('fbload',function(){FB.getLoginStatus(function(response){console.log(response);FB.api('/me',function(response))更改代码来仔细检查这一点{user_email=response.email;//获取用户电子邮件控制台.log(response);});});谢谢;我仍然有兴趣知道FB.getLoginStatus提供的是如何实际发生的?我没有看到FB.api
从FB.getLoginStatus
中获取任何参数,我想在这一部分得到一些澄清!使用我在编辑的答案中提供的代码来检查第一个和第二个问题响应。您应该看到第一个响应包含userId、accessToken、signedRequest和expiresIn。我猜FB.api正在使用浏览器中存储的userId和accessToken,并对照Facebook的数据库检查一致性。您还可以删除FB.getLoginStatus(和first console.log(响应),并查看控制台中的错误消息,其中显示:“必须使用活动访问令牌来查询有关当前用户的信息。”谢谢:)-我仍然对浏览器中存储的部分感兴趣!我希望有人澄清(并确认)这一点;以及它是如何工作的!
$(document).on('fbload', function(){
FB.getLoginStatus(function(response) {
console.log(response); //CHANGE
FB.api('/me', function(response) {
user_email = response.email; //get user email
console.log(response); //CHANGE
});
});
});