如何在我的网站中从 Facebook 注销

Posted

技术标签:

【中文标题】如何在我的网站中从 Facebook 注销【英文标题】:How to log out from facebook in my site 【发布时间】:2015-12-25 11:09:42 【问题描述】:

我正在使用https://github.com/pocesar/facebook-kohana 进行 Facebook 登录。我在注销 Facebook 时遇到问题。它不会破坏 facebook 会话。我已经尝试了很多事情,我已经阅读了很多问题。我在我的注销方法中尝试了这个,但没有结果: $this->redirect('https://www.facebook.com/logout.php? next=mysite.dev &access_token=USER_ACCESS_TOKEN');

我的注销方法是:

  public  function action_logout()
         $facebook = new Facebook(array(
            'appId'  => 'appId',
            'secret' => 'mySecret',
        ));
         $user = $facebook->getUser();

        $facebook->destroySession();
        Session::instance()->delete('user');
     
        $this->redirect('/');
    

如何销毁会话,以便用户可以使用另一个 facebook 帐户登录我的网站?谢谢!

我的登录方法是:

 public function action_fbLogin()
      
        $facebook = new Facebook(array(
            'appId'  => 'appId',
            'secret' => 'Secret',
        ));

        $user = $facebook->getUser();
       
        if ($user) 

            $user_profile = $facebook->api('/me', array('fields' => 'id,email,name,first_name,last_name,picture')); 
          
            $user_id = Model_UserFunctions::checkIfUserExist($user_profile['email']); 
            if($user_id > 0)
            
                
                Session::instance()->set('user', array(
                    'fb_id' => $user_profile['id'],
                    'user_id' => $user_id,
                    'pic' => $user_profile['picture'],
                    'email' => $user_profile['email'],
                    'first_name' =>  $user_profile['first_name'],
                    'last_name' =>  $user_profile['last_name'],
                ));
                
                //var_dump($_SESSION);
                $this->redirect('profile');
                exit;
            
            $values = array(
                    'email' => $user_profile['email'],
                    'username' => $user_profile['email'],
                    'password' => '12345678'
                );
            $user = ORM::factory ( 'User' );
            $user->values($values);
            try
            
                if($user->save())
                    $user_new_id = $user->as_array();
                    $user_new_id = $user_new_id['id'];
                    Session::instance()->set('user', array(
                            'fb_id' => $user_profile['id'],
                            'user_id' => $user_new_id,
                            'pic' => $user_profile['picture'],
                            'email' => $user_profile['email'], 
                            'first_name' => $user_profile['first_name'],
                            'last_name' => $user_profile['last_name'],
                        ));
                    
                    $this->redirect('profile');
                


            
            catch (ORM_Validation_Exception $e)
            
                $result = $e->errors('models');
                echo '<pre>';
                print_r($result);
                exit;
            


        
        else 
        
            
            $this->redirect($facebook->getLoginUrl(array('id,email,name,first_name,last_name,picture'))); 
        
        exit;
    
    

已编辑:我使用 Facebook 注销的目标是因为在我的网站中我只使用 Facebook 登录,没有其他方法可以登录我的网站,这就是它的想法。而且我的网站应该有注销方法,所以当用户想要注销时,他可以做到。 这会从 facebook 注销我,但会显示 facebook 登录页面。如何重定向到我的网站。我已将其设置为下一个,但它不会重定向到它:

<a href="https://www.facebook.com/logout.php? next=http://mysite.dev &access_token=Null">Logout</a>

【问题讨论】:

但是...他们只需要在 facebook 上使用另一个帐户登录...我认为您不能从您的网站内将他们从他们的 facebook 帐户中注销。 这不是从他们的 facebook 注销或只是终止我网站中的 facebook 会话的方式吗? :) 我有 facebook 登录按钮,我设置了会话,这就是我想从我的网站注销用户的原因。 请原谅我,但我不明白...如果您将我从您的网站中注销,而我仍然在 Facebook 上登录...那么我会回到您网站上的一个页面仍在使用相同的 FB 帐户,因此您无法使用其他帐户登录。如果我用其他人登录 Facebook,或者我没有在 Facebook 上登录,那么……你可以接受我用其他人登录,或者让我先登录 FB 是的,没错。现在,从我的网站注销的唯一方法是从 Facebook 注销。我的问题是,有什么方法可以终止 facebook 会话或使用注销方法从我的网站中的 facebook 注销? @ci_lover — 您能否编辑您的问题以明确说明您的目标是让用户(使用 Facebook 作为身份验证提供商)退出您的网站,而不是让他们退出他们的 Facebook 帐户? 【参考方案1】:

您可以使用 facebook-php-sdk API 获取 facebook 注销 url。 当用户点击该网址时,他将从他的 Facebook 帐户离线。

if ($user) 
   $logoutUrl = $facebook->getLogoutUrl();
 else 
   $loginUrl = $facebook->getLoginUrl();

有关更多信息,您可以查看此网址。

https://github.com/facebookarchive/facebook-php-sdk

【讨论】:

我用过 -> $logoutUrl = $facebook-&gt;getLogoutUrl(); $this-&gt;redirect( $logoutUrl); 但它重定向到 https://www.facebook.com/home.php ,它不会注销。 $facebook->getLogoutUrl() 是使用 php 注销 facebook 帐户的唯一方法。所以请正确检查或向我们展示更多代码。 我编辑了我的问题,我添加了我的登录方法,那里还有注销方法。 $facebook->getLogoutUrl() 不会注销我。 @ci_lover 检查您的 Facebook 应用配置并注销重定向网址。 检查什么。应该为注销设置哪些选项?我的重定向网址是正确的 - 这是我的网站。【参考方案2】:

那你脸书没问题

只是需要销毁的session吗……

在 PHP 手册的这一页上,有一个示例显示您可能需要额外的步骤来销毁超出 unset($_SESSION) 的会话

http://php.net/manual/en/function.session-destroy.php

强迫用户从 Facebook 注销对我来说似乎不是一个好举动。

数以百万计的 FB 用户有意要求保持登录状态,如果他们访问您的网站并从那里注销,他们可能会认为您将他们从 FB 帐户中注销不是很友好。许多人甚至不记得他们的密码……所以你会给他们制造问题,他们可能永远不会回到你的网站……只是说

【讨论】:

你不能通过销毁 PHP 会话来从 Facebook 注销用户。 @DharmeshGoswami — OP 想要让用户退出他们自己的网站,而不是 facebook 我在与@ci_lover 交换 cmets 后才发布此答案,以了解问题不在于登录/注销 facebook,而是网站

以上是关于如何在我的网站中从 Facebook 注销的主要内容,如果未能解决你的问题,请参考以下文章

在 Android Espresso UI 测试中从 Facebook 注销

如何使用 Facebook SDK 在我的应用程序中注销 Facebook

在 android 应用程序中从 google 和 facebook 注销

如何在 UITableViewCell 中快速创建 facebook 注销按钮

Facebook SDK 4.4.+ |登录后如何隐藏注销按钮?

当我们通过 facebook 登录时如何删除 facebook cookie