我为我的最新应用程序创建了一个基于javascript的登录,一切正常。问题是我想将所有用户存储在数据库中,并且不知道如何以facebook方式执行此操作。我有非常好的php和sql知识,所以这不是问题。我只需要一些关于如何安全存储数据的建议。
我想要的程序是:
使用javascript弹出窗口进行用户登录 - >检查mysql表中是否存在facebook id。如果没有,请保存附加信息 - >用户已登录
答案 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 。 我希望你或其他人觉得这很有用。