2011-04-02 254 views
2

我想成功登录到一个新的URL后重定向我的网页..重定向至Facebook登录后的URL

<?php 
     include_once "fbmain.php"; 
    $config['baseurl'] = "http://localhost:8080/index.php";; 

    // login or logout url will be needed depending on current user state. 
    if ($fbme) { 
     $logoutUrl = $facebook->getLogoutUrl(
     array(
      'next'  => $config['baseurl'], 
     ) 
    ); 
    } else { 
     $loginUrl = $facebook->getLoginUrl(
     array(
      'display' => 'popup', 
      'next'  => $config['baseurl'] . '?loginsucc=1', 
      'cancel_url'=> $config['baseurl'] . '?cancel=1', 
      'req_perms' => 'email,user_birthday', 
     ) 
    ); 
    } 

    // if user click cancel in the popup window 
    if (isset($_REQUEST['cancel'])){ 
     echo "<script> 
      window.close(); 
      </script>"; 
    } 

    if ($fbme && isset($_REQUEST['loginsucc'])){ 
     //only if valid session found and loginsucc is set 

     //after facebook redirects it will send a session parameter as a json value 
     //now decode them, make them array and sort based on keys 
     $sortArray = get_object_vars(json_decode($_GET['session'])); 
     ksort($sortArray); 

     $strCookie = ""; 
     $flag  = false; 
     foreach($sortArray as $key=>$item){ 
      if ($flag) $strCookie .= '&'; 
      $strCookie .= $key . '=' . $item; 
      $flag = true; 
     } 

     //now set the cookie so that next time user don't need to click login again 
     setCookie('fbs_' . "{$fbconfig['appid']}", $strCookie); 

     echo "<script> 
      window.close(); 
      window.opener.location.reload(); 
      </script>"; 
    } 

    //if user is logged in and session is valid. 
    if ($fbme){ 
     header("Location: http://localhost:8080/main.php"); 
     exit; 
    } 

?> 

然而,它加载的窗口登录弹出框里面的页面,这是为什么以及如何加载它以使其位于主页面中。

+0

您需要使用JavaScript和测试FLogin的反应,然后再决定行动的方向(你的情况了window.location = HTTP://本地主机:8080/main.php) – Khez 2011-04-02 04:32:50

+0

脑海显示下面的一些代码? – aherlambang 2011-04-02 04:56:44

+0

你只在这里给PHP代码,html/js现在会更加重要......它高度依赖于你的代码。但理论上你应该有一个处理这个场景。万一你不这样做,我们仍然会找到一个解决方案,只需发布​​js – Khez 2011-04-02 05:00:44

回答

-2

您在登录/验证完成后将用户设置为的页面设置为'next'的值。

+0

我做了它,并加载弹出框内的下一页 – aherlambang 2011-04-02 04:49:12

0

我不知道这使用Facebook的JavaScript API API。

FB.init({ 
appId: '<?= FACEBOOK_APP_ID ?>', 
status: true, 
cookie: true, xfbml: true 
}); 
FB.Event.subscribe('auth.login', function(response) { 
window.location.href='/app/home.php'; 
}); 
+0

这与问题无关..我问的是与PHP-sdk – aherlambang 2011-04-02 05:29:44

+0

的原因我用php-sdk去的是,因为用javascript我似乎无法改变按钮类型 – aherlambang 2011-04-02 05:46:47

+0

最初我尝试使用php-sdk,但它对我来说不那么灵活。所以我去了javascript api ..我不知道如何使用php-sdk来实现它。你有没有尝试使用样式表中的自定义样式来更改按钮..? – Shameer 2011-04-02 06:20:13

0

您将'next'的值设置为您希望在login/auth完成后发送给用户的页面的值。在这个PHP页面上你做

if ($fbme && isset($_REQUEST['loginsucc'])){} 

位并设置cookie。然后,你不必在JavaScript重定向里面搞乱facebook框架。

HTH

托尼

+0

你能显示一些代码吗? – aherlambang 2011-04-02 07:03:09

0

变化

if ($fbme){ 
     header("Location: http://localhost:8080/main.php"); 
     exit; 
    } 

到脚本

您还可以取出display' => 'popup',的开始,并成立了重定向URI,所以人们安装应用程序,然后返回到原始网站,这样他们将被成功安装后重定向。

0

“下一步”不工作,但“redirect_uri”做这项工作!

$params = array('redirect_uri' => 'http://yourdomain/fb_api/login_success.php'); 
$loginUrl = $facebook->getLoginUrl($params);