facebook登录后重定向到一个URL

Posted

技术标签:

【中文标题】facebook登录后重定向到一个URL【英文标题】:redirecting to a URL after facebook login 【发布时间】:2011-07-28 03:04:48 【问题描述】:

我在成功登录后尝试将我的页面重定向到一个新的 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;
    

?>

但是,它在窗口登录弹出框内加载页面,这是为什么以及如何加载它以便它在主页中。

【问题讨论】:

您需要使用 javascript 并测试 FLogin 的响应,然后决定操作过程(在您的情况下 window.location=localhost:8080/main.php ) 介意在下面显示一些代码吗? 你这里只给出了 PHP 代码,现在 html/js 会更重要...它高度依赖于你的代码。但理论上你应该有一个处理程序来处理这种情况。万一您不这样做,我们仍然会找到解决方案,只需发布​​ js 我使用与thinkdiff.net/facebook/… 发布的完全相同的代码,最后是 index.php 【参考方案1】:

“next”不起作用,但“redirect_uri”起作用!

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

【讨论】:

【参考方案2】:

改变

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

到脚本的开头

你也可以把display' =&gt; 'popup',拿出来设置一个重定向uri,这样人们安装应用程序然后回到原来的站点,这样他们在安装成功后就会被重定向。

【讨论】:

【参考方案3】:

我已经使用 facebook javascript 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';
); 

【讨论】:

这与问题无关。我用 php-sdk 询问 我使用 php-sdk 的原因是因为使用 javascript 我似乎无法更改按钮类型 最初我尝试使用 php-sdk,但它对我来说不太灵活。所以我选择了 javascript api。我不确定如何使用 php-sdk 来实现。您是否尝试过在样式表中使用自定义样式更改按钮...? 试过标记它!重要。?或者在页面末尾给出样式。对我来说它在这里工作 你能展示一些你的css代码以及登录的超文本吗?

以上是关于facebook登录后重定向到一个URL的主要内容,如果未能解决你的问题,请参考以下文章

facebook使用django app成功登录后重定向url

Facebook 登录后重定向到新的 ViewController

从身份验证对话框登录后重定向到 Facebook 应用程序

Laravel Ajax登录,成功后重定向到上一个url

Simplesamlphp IdP 登录后重定向到错误的 url

登录 NEXT-AUTH 后重定向到自定义 URL