使用ajax php登录Facebook并在会话变量

时间:2017-11-08 06:29:09

标签: javascript php ajax

我想设计一个使用Facebook帐户登录网站的模型。我按照本教程Login with Facebook using JavaScript SDK

进行了操作

使用此功能,我可以从facebook获取用户信息,通过ajax调用显示这些信息并将其存储在数据库中。 现在,当我试图将电子邮件存储在会话变量中时,它不存储。

这是我的代码:

的login.php

<?php
session_start();
include("utility.php");
?>
<html>
<body>
  <div id="status"></div> 
  <!-- Facebook login or logout button -->
  <a href="javascript:void(0);" onclick="fbLogin()" id="fbLink"><img src="fblogin.png"/></a>
  <!-- Display user profile data -->
  <div id="userData"></div>
  <!-- Display session variable value -->
  <div id="display">
    <?php 
    if(isset($_SESSION['Memberemail'])){ 
       echo $_SESSION['Memberemail'];
    } ?>
  </div>


  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  <script type="text/javascript" src="assets/js/fblogin.js" ></script>

</body
</html>

fblogin.js:

window.fbAsyncInit = function() {
    // FB JavaScript SDK configuration and setup
    FB.init({
      appId      : 'IsertYourFacebookAppId', // FB App ID
      cookie     : true,  // enable cookies to allow the server to access the session
      xfbml      : true,  // parse social plugins on this page
      version    : 'v2.8' // use graph api version 2.8
    });

    // Check whether the user already logged in
    FB.getLoginStatus(function(response) {
        if (response.status === 'connected') {
            //display user data
            getFbUserData();
        }
    });
};

// Load the JavaScript 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'));

// Facebook login with JavaScript SDK
function fbLogin() {
    FB.login(function (response) {
        if (response.authResponse) {
            // Get and display the user profile data
            getFbUserData();
        } else {
            document.getElementById('status').innerHTML = 'User cancelled login or did not fully authorize.';
        }
    }, {scope: 'email'});
}

// Fetch the user profile data from facebook
function getFbUserData(){
    FB.api('/me', {locale: 'en_US', fields: 'id,first_name,last_name,email,link,gender,locale,picture'},
    function (response) {
        document.getElementById('fbLink').setAttribute("onclick","fbLogout()");
        document.getElementById('fbLink').innerHTML = 'Logout from Facebook';
        document.getElementById('status').innerHTML = 'Thanks for logging in, ' + response.first_name + '!';
        document.getElementById('userData').innerHTML = '<p><b>FB ID:</b> '+response.id+'</p><p><b>Name:</b> '+response.first_name+' '+response.last_name+'</p><p><b>Email:</b> '+response.email+'</p><p><b>Gender:</b> '+response.gender+'</p><p><b>Locale:</b> '+response.locale+'</p><p><b>Picture:</b> <img src="'+response.picture.data.url+'"/></p><p><b>FB Profile:</b> <a target="_blank" href="'+response.link+'">click to view profile</a></p>';
        // Save user data
        saveUserData(response);        
    });
}

// Save user data to the database
function saveUserData(userData){
    $.post('userData.php', {oauth_provider:'facebook',userData: JSON.stringify(userData)}, function(data){ return true; });
}
// Logout from facebook
function fbLogout() {
    FB.logout(function() {
        document.getElementById('fbLink').setAttribute("onclick","fbLogin()");
        document.getElementById('fbLink').innerHTML = '<img src="fblogin.png"/>';
        document.getElementById('userData').innerHTML = '';
        document.getElementById('status').innerHTML = 'You have successfully logout from Facebook.';
    });
}

userData.php:

<?php
session_start();
include("utility.php");

//Convert JSON data into PHP variable
$userData = json_decode($_POST['userData']);
if(!empty($userData)){
    $_SESSION['Memberemail']=$userData->email;
    $oauth_provider = $_POST['oauth_provider'];
    //Check whether user data already exists in database
    $prevQuery = "SELECT * FROM member_info WHERE oauth_provider = '".$oauth_provider."' AND oauth_uid = '".$userData->id."'";

    $prevResult = mysqli_query($conn,$prevQuery);
    $num_rows  = mysqli_num_rows($prevResult);
    if($num_rows > 0){
        //Update user data if already exists
        $query = "UPDATE users SET first_name = '".$userData->first_name."', last_name = '".$userData->last_name."', email = '".$userData->email."', gender = '".$userData->gender."', locale = '".$userData->locale."', picture = '".$userData->picture->data->url."', link = '".$userData->link."', modified = '".date("Y-m-d H:i:s")."' WHERE oauth_provider = '".$oauth_provider."' AND oauth_uid = '".$userData->id."'";
        $update = $db->query($query);
    }else{
        //Insert user data
        $email = $userData->email;
        $query = "INSERT INTO member_info SET oauth_provider = '".$oauth_provider."', oauth_uid = '".$userData->id."', MemberFirstName = '".$userData->first_name."', MemberLastName = '".$userData->last_name."', 
        MemberEmail = '".$email."'";
        $insert = mysqli_query($conn,$query);

       // $_SESSION['Memberemail']=$userData->email;
    }
}

在userData.php中,我想在$ _SESSION [&#39; Memberemail&#39;]变量中存储电子邮件。但我不能存储在会话变量中。知道如何在会话中存储?

0 个答案:

没有答案