Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.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
Php Facebook登录无法从非主页工作_Php_Facebook_Api_Oauth - Fatal编程技术网

Php Facebook登录无法从非主页工作

Php Facebook登录无法从非主页工作,php,facebook,api,oauth,Php,Facebook,Api,Oauth,我有一个(目前非常简单)的网站,它使用Facebook的“登录Facebook的网站”应用程序设置。我的问题表面上看起来很简单,但我无法解决,有人能解释一下吗 我的网站主页是(比如说) -当我使用下面的代码从这里登录时,它工作正常 if(!$this->facebook->getUser()) { //NOT LOGGED IN $params = array( 'scope' => 'email, publish_s

我有一个(目前非常简单)的网站,它使用Facebook的“登录Facebook的网站”应用程序设置。我的问题表面上看起来很简单,但我无法解决,有人能解释一下吗

我的网站主页是(比如说) -当我使用下面的代码从这里登录时,它工作正常

if(!$this->facebook->getUser())
    {
        //NOT LOGGED IN 
       $params = array(
          'scope' => 'email, publish_stream, user_photos, status_update',
          'redirect_uri' => current_url(),
        );  
        $auth_url = $this->facebook->getLoginUrl($params);  
        $auth_text = "Log In";
    } 
    else 
    {
        //LOGGED IN         
        $fbid = $this->facebook->getUser();
        $fbid = $fbid;
        $auth_url = "https://www.facebook.com/logout.php?confirm=1&next=".urlencode(base_url().'logout/')."&access_token=".$this->facebook->getAccessToken();
        $auth_text = "Log Out";
    }

<a href="<?=$auth_url;?>" class="btn btn-primary"><i class="icon-user"></i> <?=$auth_text;?></a>
if(!$this->facebook->getUser())
{
//未登录
$params=数组(
“范围”=>“电子邮件、发布流、用户照片、状态更新”,
'重定向\u uri'=>当前\u url(),
);  
$auth_url=$this->facebook->getLoginUrl($params);
$auth_text=“登录”;
} 
其他的
{
//登录
$fbid=$this->facebook->getUser();
$fbid=$fbid;
$auth_url=”https://www.facebook.com/logout.php?confirm=1&next=“.urlencode(base_url().'logout/')。”&access_-token=“.this->facebook->getAccessToken();
$auth_text=“注销”;
}
。。那很好

然而,当我从say使用相同的代码(用户需要登录)时,我在第二个页面上也使用了上述代码,登录脚本重定向到Facebook Auth对话框(很棒),重定向到redirect_uri(很棒),但用户没有登录到该页面-即,它给出了“登录”对话框,而不是预期的结果“注销”对话框

我在这里做错了什么吗?我希望facebook登录对话框可以在我应用程序指定的网站根目录下的任何页面上运行。我不希望每次登录都需要将用户重定向到主页,他们需要能够从网站的任何页面登录

想法

问候,,
paulg

从数组$param中删除重定向url条目(这一个->重定向uri)。 仅当您希望在其他页面上重定向时才使用此选项。如果您希望在同一页面上重定向,则无需提及,它将在登录后自动返回

这里是没有重定向uri的相同代码

if(!$this->facebook->getUser())
    {
        //NOT LOGGED IN 
       $params = array(
          'scope' => 'email, publish_stream, user_photos, status_update'
         );  
        $auth_url = $this->facebook->getLoginUrl($params);  
        $auth_text = "Log In";
    } `enter code here`
    else 
    {
        //LOGGED IN         
        $fbid = $this->facebook->getUser();
        $fbid = $fbid;
        $auth_url = "https://www.facebook.com/logout.php?confirm=1&next=".urlencode(base_url().'logout/')."&access_token=".$this->facebook->getAccessToken();
        $auth_text = "Log Out";
    }

<a href="<?=$auth_url;?>" class="btn btn-primary"><i class="icon-user"></i> <?=$auth_text;?></a>
if(!$this->facebook->getUser())
{
//未登录
$params=数组(
'范围'=>'电子邮件、发布流、用户照片、状态更新'
);  
$auth_url=$this->facebook->getLoginUrl($params);
$auth_text=“登录”;
}”“在这里输入代码`
其他的
{
//登录
$fbid=$this->facebook->getUser();
$fbid=$fbid;
$auth_url=”https://www.facebook.com/logout.php?confirm=1&next=“.urlencode(base_url().'logout/')。”&access_-token=“.this->facebook->getAccessToken();
$auth_text=“注销”;
}

我已经实现了一种变通方法。在非基本URL的页面上,我让它们在会话变量中引用自己,如下所示:

if(!$this->facebook->getUser())
{
  // Set a session var <---
  $_SESSION['redirect_state'] = current_url();
  //NOT LOGGED IN 
   $params = array(
      'scope' => 'email, publish_stream, user_photos, status_update',
      'redirect_uri' => base_url(), // <-- Changed this back to base url.
    );  
    $auth_url = $this->facebook->getLoginUrl($params);  
    $auth_text = "Log In";
} 
else 
{
    //LOGGED IN         
    $fbid = $this->facebook->getUser();
    $fbid = $fbid;
    $auth_url = "https://www.facebook.com/logout.php?confirm=1&next=".urlencode(base_url().'logout/')."&access_token=".$this->facebook->getAccessToken();
    $auth_text = "Log Out";
}

<a href="<?=$auth_url;?>" class="btn btn-primary"><i class="icon-user"></i> <?=$auth_text;?></a>
用户现在被重定向回他们登录的页面。由于FB用户已登录,重定向会话变量将不会设置,如果用户返回主页,主页将不会奇怪地重定向,因为重定向会话变量也没有设置


我希望这对其他人有所帮助。我很惊讶没有发现其他人也在谈论这个问题:)

比较登录URL–它们在两种情况下都正确吗?检查您的浏览器在以两种不同方式登录后接受了哪些Cookie。您好,谢谢您的评论。在这种情况下,Cookie不起作用。它正在使用FB pHP API,它将数据推送到$\u会话数组中。可以肯定的是,我已经检查了cookie,并且在这两种情况下(登录成功与失败,分别从主页和非主页登录)生成了相同的cookies。LoginURL在这两种情况下都是正确的,是的。有什么想法吗?这不起作用。谢谢你的回复。我使用的是PHP API,所以删除重定向uri只会使getLoginUrl()插入当前URL(这是非主页,登录失败)进入生成的URL-导致登录重定向到自身并失败。这不是重定向问题,因为我们知道这是可以设计的。这是一个FB无法接受并重定向到不是应用程序基本URL的URL的问题。有什么想法吗?有没有人从FB登录对话框工作并重定向到其他页面r web应用程序的主页?你能更清楚地说明$u会话['redirect\u state']存在的小代码吗?该代码放在哪里??
// Is this a redirect from a another page's login?
    if((isset($_SESSION['redirect_state'])))
    {
        $redir_page = $_SESSION['redirect_state'];  
        unset($_SESSION['redirect_state']);
        redirect($redir_page);
        exit;
    }