通过Facebook登录后检索姓名

时间:2017-08-30 10:44:43

标签: php forms facebook

我设法通过facebook api登录(我认为)。这是我的代码:

<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId            : '134824563795810',
      autoLogAppEvents : true,
      xfbml            : true,
      version          : 'v2.10'
    });
    FB.AppEvents.logPageView();
  };

  (function(d, s, id){
     var js, fjs = d.getElementsByTagName(s)[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement(s); js.id = id;
     js.src = "//connect.facebook.net/en_US/sdk.js";
     fjs.parentNode.insertBefore(js, fjs);
   }(document, 'script', 'facebook-jssdk'));

   function myFacebookLogin() {
    FB.login(function(){}, {scope: 'publish_actions'});
    }

</script>

简单的按钮只是为了测试它是否有效:

<button onclick="myFacebookLogin()">Kontynuuj przez facebook</button>

点击后我会收到这个弹出窗口:

enter image description here

我单击确定,我认为我已登录。再次单击会生成小弹出窗口,这会快速消失。我说我认为我已登录,因为我没有在我的网站上使用任何授权。我不需要它。

我的问题是:如果我已登录,如何获取用户的姓名并将此值放入我的括号输入中?

enter image description here

我想让脚本只将值放入输入中。像:

  • Imię - &gt; first name
  • Nazwisko - &gt; last name

有什么建议吗?

修改

我终于想出了这段代码:

<script>
function getUserData() {
        FB.api('/me?fields=first_name,last_name,email,location', function(response) {
                var imie = document.getElementById('basketInputName');
                if(!imie || !imie.value)
                    imie.value = response.first_name;
                var nazwisko = document.getElementById('basketInputLastName');
                    if(!nazwisko || !nazwisko.value)
                        nazwisko.value = response.last_name;
                var email = document.getElementById('basketInputMail');
                    if(!email || !email.value)
                        email.value = response.email;
                var location = document.getElementById('cityToHidden');
                    if(!location || !location.value)
                        location.value = response.location.name;
        });
}
  window.fbAsyncInit = function() {


FB.init({
  appId            : '134824563795810',
  autoLogAppEvents : true,
  xfbml            : true,
  version          : 'v2.10'
});
FB.getLoginStatus(function(response) {
        if (response.status === 'connected') {
                //user is authorized
                document.getElementById('loginBtn').style.display = 'none';
                getUserData();
        } else {
                //user is not authorized
        }
});
  };

  (function(d, s, id){
 var js, fjs = d.getElementsByTagName(s)[0];
 if (d.getElementById(id)) {return;}
 js = d.createElement(s); js.id = id;
 js.src = "//connect.facebook.net/en_US/sdk.js";
 fjs.parentNode.insertBefore(js, fjs);
   }(document, 'script', 'facebook-jssdk'));

   function myFacebookLogin() {
FB.login(function(){
    getUserData();
}, {scope: 'user_location'});
}

但这不符合我的意愿。当我点击loggin按钮时没有任何反应,但是当我刷新页面并检查存储桶时,我看到firstNamelastNameemail都在输入中。而且我不知道如何通过点击login按钮而不刷新页面来动态填充输入。 有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

使用public_profile范围

function myFacebookLogin() {
FB.login(function(){}, {scope: 'publish_actions,public_profile'});

}

在公开个人资料中,您获得first_name和last_name

请参阅此处details

答案 1 :(得分:0)

使用user_about_me&amp; public_profile范围

function myFacebookLogin() {
    FB.login(function(){}, {scope: 'publish_actions,user_about_me,public_profile'});
}