Foursquare注销按钮

时间:2011-02-28 17:42:09

标签: php button oauth logout foursquare

* 如果有兴趣,请在此问题上查看Foursquare的回答,作为对此帖的评论 *

请帮忙,我还在为此而战:(

我创建了一个删除所有与Foursquare相关的Cookie的按钮。 使用Firebug进行检查,点击时未设置cookie。

同样的编程也会删除插入数据库中的令牌 当用户第一次登录时。在数据库中检查,该行是 删除。

以下是发生的事情:

  1. 在没有Cookie的新浏览器中,用户登录。
  2. 设置Cookie并插入包含令牌和用户ID的行 数据库。
  3. 用户退出。
  4. Cookie未设置并从数据库中删除行

  5. 现在,其他用户想要登录。他/她在我的网络应用中点击<a href='".$authorizeUrl."'>Log in</a>

  6. Foursquare登录页面显示,但他/她可以填写表格 在,页面使用以前的用户令牌重定向回我的Web应用程序 和信息!

  7. 在没有第6点发生的情况下,我可以做一个干净的开始的唯一方法是 手动删除浏览器中的所有Cookie :(

    任何想法将不胜感激,我不知道该在哪里关注。 在我正在使用的代码下面,请尝试一下,你会看到第6步是如何发生的。

    非常感谢

    <?php
    
    ob_start();
    require_once('includes/EpiCurl.php');
    require_once('includes/EpiSequence.php');
    require_once('includes/EpiFoursquare.php');
    
    
    $logout= $_GET['logout']; 
    if ($logout == 'true'){ /*I'm deleting all the cookies foursquare related just in case*/
            $pastdate = mktime(0,0,0,1,1,1970);
                   setcookie ("XSESSIONID", "", time() - 18600);
               setcookie ("access_token", "", time() - 18600);
               setcookie ("ext_id", "", time() - 18600);
               setcookie ("LOCATION", "", time() - 18600);
               setcookie("access_token", "", $pastdate);
               setcookie("XSESSIONID", "", $pastdate);
               setcookie("ext_id", "", $pastdate);
               setcookie("LOCATION", "", $pastdate);
               setcookie("_chartbeat2", "", $pastdate);
               setcookie("__utmb", "", $pastdate);
               setcookie("__utmc", "", $pastdate);
               setcookie("__utma", "", $pastdate);
               setcookie("__utmz", "", $pastdate);
               $_SESSION['XSESSIONID']=false;
                unset($_SESSION['XSESSIONID']);
    
    
     } 
    
    $clientId = "yyyyyyyyy";
    $clientSecret = "xxxxx";
    $redirectUrl = 'mypage.php';
    
    
       $fsObjUnAuth = new EpiFoursquare($clientId, $clientSecret);
    
          $thecode = $_GET['code'];
    
     if(!isset($thecode) && !isset($_COOKIE['access_token'])) { //not in yet
    
         $authorizeUrl = $fsObjUnAuth->getAuthorizeUrl($redirectUrl); 
    
    
        echo"<a href='".$authorizeUrl."'>Let's log in</a>";
    
     }else{  /*we're in*/
    
    
    
        if(!isset($_COOKIE['access_token'])) {  
    
    
             $token = $fsObjUnAuth->getAccessToken($thecode, $redirectUrl);
              setcookie('access_token', $token->access_token);
              $_COOKIE['access_token'] = $token->access_token;     
    
       }  
            $fsObjUnAuth->setAccessToken($_COOKIE['access_token']);
    
    
          echo "we're in";
    
         echo"<br><a href='mypage.php?logout=true'>Logout</a>";   
    
     }             
    
    ?>
    

2 个答案:

答案 0 :(得分:1)

在取消设置之前,您是否尝试更改过期日期的值?似乎unset不会破坏cookie。

答案 1 :(得分:1)

你本身并不能真正“退出”。每个Foursquare文档的令牌永远不会过期。你正在做正确的事情。您需要点击https://foursquare.com/oauth2/authorize而不是https://foursquare.com/oauth2/authenticate。点击/authorize将强制用户重新验证其身份,(重新登录),并重新授权您的应用,为您的应用提供新的访问令牌,以便在本地存储。