2016-05-31 140 views
0

我正在尝试设置基本登录w/Facebook按钮。正确的Facebook PHP SDK登录路线

这基本上就是我复制: https://developers.facebook.com/docs/php/howto/example_facebook_login

唯一的区别是我想要的一切设置在一个文件中(这样我就可以让所有的社会登录代码在一个地方),我希望创建链接并将用户全部重定向到一个。

当我点击处理程序生成的页面时,我得到一个“对不起这个页面不可用”的消息。

Twitter的流程基本上是一样的(它是完整的,功能没有问题)。我确实将oauth标记保存到了一个数据库中,但我还没有完成对Facebook部分的处理。它会保存保存表,我只保存oauth提供程序或其他东西。

这里的要点是:

switch(strtolower($_REQUEST['method'])) {  
case 'twitter': 
    /*ommited, but it's basically the same flow*/ 
    break; 

case 'facebook': 
    // if we don't have a step, we don't know what to do 
    if (!isset($_REQUEST['step'])) { 
     die('Fail: invalid step: (none)'); 
    } 

    // we'll be using the Facebook PHP SDK 
    require(FACEBOOK_SDK_PATH); 

    switch(strtolower($_REQUEST['step'])) { 
     case 1: 
      // instantiates a new SDK App object 
      $fb = new Facebook\Facebook([ 
       'app_id' => FACEBOOK_APP_ID, 
       'app_secret' => FACEBOOK_APP_SECRET, 
       'default_graph_version' => '2.0' 
      ]); 

      // gets helper 
      $helper = $fb->getRedirectLoginHelper(); 

      // optional permissions parameter 
      // we want the users email address 
      $permissions = ['email']; 

      // generates the url for the user to authorize access 
      $loginUrl = $helper->getLoginUrl('http://localhost/social-login.php?method=facebook&step=2', $permissions); 

      // redirect user 
      header('Location: ' . $loginUrl); 

      break; 

     case 2: 
      // this should include an access token so we can get information about the user and consider them authenticated 
      echo '<pre>'; 
      var_dump($_SESSION); 
      var_dump($_REQUEST); 
      echo '</pre>'; 
      die(); 

      break; 

     default: 
      die('Fail: invalid step: ' . $_REQUEST['step']); 
    } 
    break; 

default: 
    die('Fail: invalid method . ' . $_REQUEST['method']); 
} 

我倒上面的文件了,只是想不出有什么遗漏。它可能是应用程序端的设置?本地主机回调的问题?

我将默认图形版本匹配到应用程序设置为(2.0)的任何位置。我不确定是否可以改变,但是我看到很多使用2.2和2.5的代码,但我无法弄清楚这是否也可能是我的问题的一部分。我不会假设,但我想我会在这里写一张便条。

+0

_“我得到一个‘对不起,该网页无法使用’消息” _ - 哪里的?这是您的应用程序明确输出的消息吗?或者你只是指浏览器的默认错误页面?检查浏览器的开发工具网络面板中发生了什么 - 您是否看到500或其他服务器端错误?去检查服务器的日志文件。 – CBroe

+0

@CBroe这是我重定向到由SDK生成的URL时得到的消息。 http://i.imgur.com/XWhpDpb.png – Jeff

回答

2
$fb = new Facebook\Facebook([ 
    'app_id' => FACEBOOK_APP_ID, 
    'app_secret' => FACEBOOK_APP_SECRET, 
    'default_graph_version' => '2.0' 
]); 

您指定了API版本错误,因此SDK创建了错误的登录对话框URL。

您需要包括v

'default_graph_version' => 'v2.0' 
+0

完美,谢谢! – Jeff