如何使用javascript登录,但使用php / mysql存储userinfo?

时间:2011-09-15 18:00:06

标签: php mysql facebook facebook-javascript-sdk facebook-php-sdk

我为我的最新应用程序创建了一个基于javascript的登录,一切正常。问题是我想将所有用户存储在数据库中,并且不知道如何以facebook方式执行此操作。我有非常好的php和sql知识,所以这不是问题。我只需要一些关于如何安全存储数据的建议。

我想要的程序是:

使用javascript弹出窗口进行用户登录 - >检查mysql表中是否存在facebook id。如果没有,请保存附加信息 - >用户已登录

2 个答案:

答案 0 :(得分:1)

<script type="text/javascript">
window.fbAsyncInit = function() {
    FB.init({
        appId: 'YOUR_APP_ID',
        status: true,
        cookie: true,
        oauth: true
    });
    FB.Event.subscribe('auth.login', function(response) {
        // response returns a JSON object containing data relevant to the logged in user.
        userID = response.authResponse.userID;

        // using jQuery to perform AJAX POST.
        $.post('form_handler.php', {userID: userID}, function() {
            // POST callback
        });
    });
}
</script>

您的form_handler.php文件需要设置为从$ _POST获取userID变量。从那里你可以使用SQL来检查用户是否已经存在等等。

如果您担心userID JavaScript变量很容易被篡改,我建议使用form_handler.php文件中的PHP SDK来获取当前的uid。在form_handler.php里面(最基本的形式)就是你需要做的事情:

<?php
require('facebook.php');
$facebook = new Facebook(array(
    'appId' => YOUR_APP_ID,
    'secret' => YOUR_APP_SECRET
));
// get the current logged in userID
$user = $facebook->getUser();

// SQL queries (check if user exists, insert, etc.)

?>

上述代码假设您已将应用迁移到oAuth 2.0。

答案 1 :(得分:-1)

成功登录Facebook JS登录后调用此函数 testAPI()

<强> yourJSfile.js

function testAPI() {
    console.log('Welcome!  Fetching your information.... ');
    FB.api('/me', function(response) {

        var json = JSON.stringify(response);
        setCookie("fbresponse_"+response.id, json, 1);
        facebook_response = response;
        doLocalPosiive();
        return;
        for(var propt in response){
            console.log(propt + ': ' + response[propt]);
        }
    });
}

function setCookie(c_name,value,exdays)
{
    var exdate=new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var c_value=encodeURIComponent(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
    document.cookie=c_name + "=" + c_value;
}

testAPI函数将响应转换为JSON字符串并将其保存到cookie并在您的php页面上,您可以检索cookie并解析signed_request(并使用您已知的有效app_secret验证已签名的请求,我猜)并解码JSONed Response,然后在php / mySQL中安全地执行任何操作。

<强> thePHPfile.php

<?php

function getSignedRequest($app_id){
    $signed_request = $_COOKIE["fbsr_{$app_id}"];
    if($signed_request){
        return $signed_request;
    } else {
        return false;
    }
}

function parseSignedRequest($signed_request, $secret){
    list($encoded_sig, $payload) = explode('.', $signed_request, 2);

    //Decode the data
    $sig = base64_url_decode($encoded_sig);
    $data = json_decode(base64_url_decode($payload), true);

    if(strtoupper($data['algorithm']) !== 'HMAC-SHA256'){
        error_log("Unknown Algorithm. Expected HMAC-SHA256");
        return null;
    }

    //Verify the signed_resquest
    $expeted_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
    if($sig !== $expeted_sig){
        error_log("Bad Signed JSON signature!");
        return null;
    }

    return $data;
}

function base64_url_decode($str){
    //$str .= str_repeat("=", (4-(strlen($str)%4)));
    return base64_decode(strtr($str, '-_', '+/')); 
}

// Please edit the next 2 lines
$app_id = "314xxxxxxxxx990";
$app_secret = "56b5eaxxxxxxxxxxxxxxxxxxx37c799";



if($fbsr = getSignedRequest($app_id)){
    $response = parseSignedRequest($fbsr, $app_secret);
    if($response['user_id']){
        $js_response = $_COOKIE["fbresponse_{$response['user_id']}"];       
        $response_array = (json_decode($js_response, true));

        //you can perform your database activities here now
    }
}

?>

请不要忘记编辑 APP_ID APP_SECRET 。 我希望你或其他人觉得这很有用。