Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript FB登录API-检查用户是否为实际用户_Javascript_Php_Facebook_Facebook Graph Api - Fatal编程技术网

Javascript FB登录API-检查用户是否为实际用户

Javascript FB登录API-检查用户是否为实际用户,javascript,php,facebook,facebook-graph-api,Javascript,Php,Facebook,Facebook Graph Api,这是一个ordenary facebook javascript登录函数。 如果用户已连接并验证,我将通过fb.api('/me')向包含给定ID的服务器发送ajax请求。但是任何人都可以修改代码,并以他们可以使用其他人的ID并将其发送到服务器的方式编辑代码 如何验证通过javascript登录的用户是实际用户,而不仅仅是更改代码的用户?好,因为您正在使用PHP作为后端语言 我建议除了发送用户id之外,还可以发送id散列,其中添加了一些特殊的盐,而这些盐并没有显示在java脚本中,只是显示在ph

这是一个ordenary facebook javascript登录函数。 如果用户已连接并验证,我将通过
fb.api('/me')
向包含给定ID的服务器发送ajax请求。但是任何人都可以修改代码,并以他们可以使用其他人的ID并将其发送到服务器的方式编辑代码


如何验证通过javascript登录的用户是实际用户,而不仅仅是更改代码的用户?

好,因为您正在使用PHP作为后端语言

我建议除了发送用户id之外,还可以发送id散列,其中添加了一些特殊的盐,而这些盐并没有显示在java脚本中,只是显示在php代码中

举例来说

FB.Event.subscribe('auth.authResponseChange', function(response) {
    if (response.status === 'connected') {
        FB.api('/me', function(response) {
            switchTo('loggedin');
            // connected & ok
        });
    } 
    else if (response.status === 'not_authorized') {
        switchTo('loggedout');
        // connected but not ok

        FB.login();
    } 
    else 
    {
        switchTo('loggedout');
        // not connected

        FB.login();
    }
});

这段代码是用来展示这个想法的,它不是一个完整的代码,可以使用

一个非常安全的方法是使用PHP SDK:

看看“用法”:


例如,您可以在使用JS SDK登录后重新加载页面,并在加载页面之前使用PHP SDK进行检查。

调用服务器端的
/me
。这是散列密码,而不是像授权那样的普通密码,在整个Web上都使用。啊,好吧,这只是一个普通的md5字符串。然而,md5是不安全的,客户端上的秘密来自哪里?看看答案,客户端从服务器端得到一个黑盒秘密哈希,它与同样基于服务器的salt相结合,我同意你的观点,md5哈希现在很常见,所以我使用salt,你也可以使用SHA1,尽管我很乐意听到您的贡献并从中受益,谢谢,但在页面加载时,您会在php中生成一个秘密并在url中传递。然后呢?无意冒犯,我只是想理解。总是愿意学习新的东西:)-现在我只是不明白,那杂凑的目的是什么?你什么时候使用它,后端什么时候会被调用?好的,我用你的id和salt组合生成secret,所以你会把它发送到后端,让你使用ajax登录,假设用户如asker所说手动更改了id,那么当我运行上面的后端代码时,我会发现这是一个试图劫持idIs的假用户,这是“非常安全的”吗路还是“安全”的路?什么使它“相当”安全?我如何提高安全性?“安全”;)尤其是因为它都是用php编写的。
var url = "www.example.com/?id=SOME_ID&secret=<?php echo md5(SOME_ID.SECRET)";
 $secret = $_GET['secret'];
 $id = $_GET['id'];
 if (md5($id.SECRET) == $secret){
  //User is ok here 
 }else{
  //Some one missing around
 }
require 'facebook-php-sdk/src/facebook.php';

$facebook = new Facebook(array(
  'appId'  => 'YOUR_APP_ID',
  'secret' => 'YOUR_APP_SECRET',
));

// Get User ID
$user = $facebook->getUser();
if ($user) {
  //user is logged in
} else {
  //user is not logged in
}