检查用户是否已登录symfony

时间:2011-02-17 06:15:36

标签: php symfony-1.4 sfguard

我正在使用symfony 1.4.8和Propel作为ORM。要创建登录系统,我使用的是sfGuardPlugin。我已经配置了所有内容,登录系统正在运行。但是我在获取sfGuard用户数据(例如sfGuardUser id)方面存在问题,并且在登录时我遇到了后退按钮问题;当我登录并按下后退按钮时,它再次显示登录页面。

以下是我在视图中使用的代码,用于检查用户是否已登录:

<?php if($sf_user->isAuthenticated()): ?>
         <?php echo link_to('Logout', '/logout') ?>
<?php else: ?>
         <?php echo link_to('Login', '/login') ?>
<?php endif; ?>

如果我使用此方法获取sfGuardUser id:

if($this->getUser())
{
    $login_id=$this->getUser();
    $c=new Criteria();
    $c->add(SfGuardUserPeer::USERNAME,$login_id);
    $sf_guard_user=SfGuardUserPeer::doSelectOne($c);
    if($sf_guard_user)
    {
        $sf_id=$sf_guard_user->getId();          

    }
}

它给了我错误:

  

(致命错误:嵌套级别太深 - 递归依赖?在D:\ development \ sfprojects \ proj \ lib \ vendor \ symfony \ lib \ plugins \ sfPropelPlugin \ lib \ vendor \ propel \ util \ DebugPDOStatement.php上线124)

1 个答案:

答案 0 :(得分:2)

首先,我不认为这段代码有问题,

<?php if($sf_user->isAuthenticated()): ?>
         <?php echo link_to('Logout', '/logout') ?>
<?php else: ?>
         <?php echo link_to('Login', '/login') ?>
<?php endif; ?>

我通常使用类似的东西:

  <div id="left_section">
      <!-- This section is devoted to user context op -->
      <?php if(!$sf_user->isAuthenticated()):?>
        <div id="log_form">
          <?php echo include_partial('user/login',array('form' => new sfGuardFormSignin()))?>
        </div>
        Dont have an account yet?
        <?php echo link_to('Register now!','user/new')?>
      <?php else:?>
        <div id="user_info">
         <?php echo include_partial('user/info')?>
       </div>
      <?php endif?>
    </div>

我认为浏览器后退按钮对于Web开发人员来说是一个痛苦的事情,所以如果这就是你对“后退按钮”的说法,那就完全不鼓励了。尝试在用户登录登录页面时重定向用户,或使用插槽呈现欢迎消息/登录表单,这样您就可以确保他/她始终能够看到应该使用的内容。此外,重定向将使服务器再次呈现所有内容,并确保会话信息完整。

关于获取用户ID的方法,它应该看起来像这样,让我们​​假设你正在采取行动:

$this->getUser()->getGuardUser()->getId()

那应该这样做。