简体   繁体   English

使用Facebook登录,获取数据并将其存储在MySQL数据库中(如果不存在)

[英]Log in with Facebook, get data and store it in MySQL database if they don't exist

I made a Facebook log in with javascript sdk. 我使用javascript sdk登录了Facebook。 I can get name and id and picture but can't get email. 我可以获取姓名,身份证和图片,但无法获取电子邮件。 I am sending name with ajax to php so it can be inserted in database but it inserts empty fields. 我正在用ajax向php发送名称,因此可以将其插入数据库中,但会插入空字段。 So my question is how to insert name into database and how to get e-mail. 所以我的问题是如何将名称插入数据库以及如何获取电子邮件。

This is my js code: 这是我的js代码:

// This is called with the results from from FB.getLoginStatus().
function statusChangeCallback(response) {
    console.log('statusChangeCallback');
    console.log(response);
    // The response object is returned with a status field that lets the
    // app know the current login status of the person.
    // Full docs on the response object can be found in the documentation
    // for FB.getLoginStatus().
    if (response.status === 'connected') {
        // Logged into your app and Facebook.
        testAPI();
    } else if (response.status === 'not_authorized') {
        // The person is logged into Facebook, but not your app.
        document.getElementById('status').innerHTML = 'Please log ' +
                'into this app.';
    } else {
        // The person is not logged into Facebook, so we're not sure if
        // they are logged into this app or not.
        document.getElementById('status').innerHTML = 'Please log ' +
                'into Facebook.';
    }
}

// This function is called when someone finishes with the Login
// Button.  See the onlogin handler attached to it in the sample
// code below.
function checkLoginState() {
    FB.getLoginStatus(function (response) {
        statusChangeCallback(response);
    });
}

window.fbAsyncInit = function () {
    FB.init({
        appId: 'XXX',
        cookie: true, // enable cookies to allow the server to access 
        // the session
        xfbml: true, // parse social plugins on this page
        version: 'v2.2' // use version 2.2
    });

    // Now that we've initialized the JavaScript SDK, we call 
    // FB.getLoginStatus().  This function gets the state of the
    // person visiting this page and can return one of three states to
    // the callback you provide.  They can be:
    //
    // 1. Logged into your app ('connected')
    // 2. Logged into Facebook, but not your app ('not_authorized')
    // 3. Not logged into Facebook and can't tell if they are logged into
    //    your app or not.
    //
    // These three cases are handled in the callback function.

    FB.getLoginStatus(function (response) {
        statusChangeCallback(response);
    });

};

// Load the SDK asynchronously
(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'));

// Here we run a very simple test of the Graph API after login is
// successful.  See statusChangeCallback() for when this call is made.
function testAPI() {
    console.log('Welcome!  Fetching your information.... ');
    FB.api('/me', function (response) {
        console.log(JSON.stringify(response));
        console.log('Successful login for: ' + response.name);
        document.getElementById('status').innerHTML =
                'Thanks for logging in, ' + response.name + '!';
    });
}

function Login()
{
    FB.login(function(response) {
       if (response.authResponse) 
       {
            getUserInfo();
        } else 
        {
         console.log('User cancelled login or did not fully authorize.');
        }
     },{scope: 'email,user_photos,user_videos'});
}

function Logout()
{
    FB.logout(function(){document.location.reload();});
}

function getPhoto()
{
    FB.api('/me/picture?type=normal', function(response) {
        var str="<br/><b>Pic</b> : <img src='"+response.data.url+"'/>";
        document.getElementById("status").innerHTML+=str;
    });
}

function getUserInfo() {
    FB.api('/me', function(response) {
        var str="<b>Name</b> : "+response.name+"<br>";
            str +="<b>Link: </b>"+response.link+"<br>";
            str +="<b>Username:</b> "+response.username+"<br>";
            str +="<b>id: </b>"+response.id+"<br>";
            str +="<b>Email:</b> "+response.email+"<br>";
            str +="<input type='button' value='Get Photo' onclick='getPhoto();'/>";
            str +="<input type='button' value='Logout' onclick='Logout();'/>";
        document.getElementById("status").innerHTML=str;
        var username_fb = 'response.name=' +response.name;

        $.ajax({
            url: "check_user_fb.php", //This is the page where you will handle your SQL insert
            type: "get",
            data: "username_fb=" + username_fb, //The data your sending to some-page.php
            success: function(){
                console.log("AJAX request was successfull");
            },
            error:function(){
                console.log("AJAX request was a failure");
            }
        });
    });
}

<div scope="public_profile,email" onclick="Login();">
    Login
</div>

This is my php: 这是我的PHP:

if ($_SERVER['REQUEST_METHOD'] == 'GET') {
    global $return;
    if (insertIntoDatabase()) {
        //return "Data inserted successfully!";
        echo json_encode($return);
    } else {
        echo json_encode($return);
    }
}

function insertIntoDatabase() {
    // Function that inserts username, password and email defined by user into database
    global $return;
    //Connect to a database
    include 'includes/database.php';
    // Sanitize inputs
    $username = $_POST['username_fb'];
    //Insert fields into database
    $sql = "INSERT INTO users (username) VALUES ('$username')";
    (mysqli_query($link, $sql));
    // close connection
    mysqli_close($link);
}

try these... 试试这些...

FB.api('/me',{ locale: 'en_US', fields: 'name, email, first_name, last_name, gender, link,username,id,age_range' }, function(response) {
    var str="<b>Name</b> : "+response.name+"<br>";
    str +="<b>Link: </b>"+response.link+"<br>";
    str +="<b>Username:</b> "+response.username+"<br>";
    str +="<b>id: </b>"+response.id+"<br>";
    str +="<b>Email:</b> "+response.email+"<br>";
    str +="<b>Age range:</b> "+response.age_range+"<br>";
    str +="<b>First Name:</b> "+response.first_name+"<br>";
    str +="<b>Last Name:</b> "+response.last_name+"<br>";}
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM