在本地主机上设置Facebook登录

4
我一直在按照这里列出的步骤创建Facebook应用程序登录: http://developers.facebook.com/docs/howtos/login/server-side-login/ 现在我已经进行到第三步。我正在本地主机上进行开发设置,然后我将使用不同的应用程序ID发布到Azure网站。但是我想先在本地主机上使其正常工作。(我还没有尝试过非本地主机域。)
在我的Facebook应用程序配置页面上,我设置了几个相关字段: 站点URL:http://localhost:8052/(添加空格以允许提交到Stack Overflow) 应用程序域:localhost
如果没有设置Facebook代码,则main.php会重定向到登录页面。这可以很好地工作。
<head>
<?php
   if(!isset($_SESSION['code'])) {
      echo ('<meta http-equiv="REFRESH" content="0;url=/login.php" />');
   }
?>
</head>

login.php使用从Facebook示例复制的代码将重定向到Facebook的登录页面。

<?php

   include '/lib/url.php';

   $app_id = "XXXXX";
   $app_secret = "XXXXX";
   $my_url = CreateUrlForPage('welcome.php');

   session_start();

   $code = '';
   if(!isset($_REQUEST["code"])) {
     $_SESSION['state'] = md5(uniqid(rand(), TRUE)); // CSRF protection
     $dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" 
       . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
       . $_SESSION['state'];

     echo $my_url.'<br/>';
     echo $dialog_url.'<br/>';
     echo("<script> top.location.href='" . $dialog_url . "'</script>");
   }
?>  

显然,我在上面混淆了我的应用程序ID。

由我的“CreateUrlForPage”函数生成的URL看起来很好,Facebook登录URL也是如此:

http://localhost:8052/welcome.php
https://www.facebook.com/dialog/oauth?client_id=XXXX&redirect_uri=http%3A%2F%2Flocalhost%3A8052%2Fwelcome.php&state=XXXX

再次,这里有一些混淆。真实的值看起来没问题。第一个是整数,第二个是长十六进制字符串。

当我访问http:// localhost : 8052/login.php时,页面会重定向到Facebook,并显示完全无用的错误:"出现错误,请稍后再试"。

我查看了 Stack Overflow 上的一些帖子,但它们没有解决我的问题。

我得到的错误看起来就像在这里描述的那样: 本地主机上 Facebook 应用程序登录错误 提供的建议是设置域和站点 URL,我已经做到了。

还有一个链接指向这个问题:在本地主机上运行 Facebook 应用程序 同样,他们建议设置站点 URL。他们还谈论了 app-canvas,这不是我正在使用的东西,我也不知道它与登录有什么关系。

值得一提的是,在我设置站点 URL 和域之前,我得到了另一个错误,告诉我需要设置站点 URL。

1个回答

2
这段代码对我有效。请仔细检查你的Facebook应用ID,我的网站URL设置为http://localhost:8052/,不需要设置登录域名,谢谢。 http://gamma.owlweb.com.ua/index.php/?route=account/register/fb
<?php

$app_id = "xxx";    $app_secret = "xxx"; 
$my_url ="http://localhost:3080/abc.php";

session_start();

$code = '';    

if(!isset($_REQUEST["code"])) {
  $_SESSION['state'] = md5(uniqid(rand(), TRUE)); // CSRF protection
  $dialog_url = 
    "https://www.facebook.com/dialog/oauth?client_id=".$app_id
    ."&redirect_uri=".urlencode($my_url)
    ."&state=".$_SESSION['state'];

  echo $my_url.'<br/>';
  echo $dialog_url.'<br/>';
  echo("<script> top.location.href='" . $dialog_url . "'</script>");
} 
?>

我认为我使用的应用程序出了问题。我在Facebook上创建了一个新的应用程序,它运行良好。我创建的旧应用程序大约10年前,从未使用过。也许自那时以来有些变化... - MattD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接