2011-05-06 109 views
0

我已经建立了使用CakePHP一个非常简单的登录系统,但现在我有一些问题:CakePHP的登录帮助

1)如何显示setFlash消息,当用户登录?我尝试在登录方法中添加一个,但是当访问登录页面时它会一直显示它,并且在成功登录时不显示它?但使用注销方法?

2.)当用户登录时,由于loginRedirect他们总是被带到主页,但是如何将它们发送到他们当前所在的页面?由于登录表单位于公共页面的标题中,所以当他们登录时,我希望它们被发回到同一页面。

这是目前在我app_controller.php代码我已经到位

var $components = array('Auth','Session'); 

function beforeFilter() 
{ 
    $this->Auth->authorize = 'actions'; 
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); 
    $this->Auth->loginRedirect = array('controller' => 'home', 'action' => 'index'); 
    $this->Auth->logoutRedirect = array('controller' => 'home', 'action' => 'index'); 

} 

,这里是我的users_controller.php中

/** 
* Log in 
*/ 

function login() 
{ 

    $this->Session->setFlash('You\'re now logged in'); 

    $this->layout = 'login'; 

    $this->set('title_for_layout', 'Log in'); 

} 

/** 
* Log out 
*/ 

function logout() 
{ 

    $this->Session->setFlash('<div class="content"><h2>Pow</h2><p>Moo</p></div>'); 

    $this->redirect($this->Auth->logout()); 

} 

这里是登录形式,是在每个公共页面的标题(注意,我也有一个专用的登录页面,并且包含相同的表单):

<?php echo $this->Form->create('User', array('id' => 'loginform', 'type' => 'post', 
     'url' => array('controller' => 'users', 'action' => 'login'))); ?> 

<fieldset id="login"> 

    <ul class="clearfix"> 
     <li id="li-username"> 
      <?php echo $this->Form->input('username', array('label'=>false,'placeholder'=>'Username or email address')); ?> 
     </li> 
     <li id="li-password"> 
      <?php echo $this->Form->input('password', array('type'=>'password','label'=>false,'placeholder'=>'Password')); ?> 
      <span id="iforgot"><?php echo $this->Html->link('?', 
      array('controller' => 'users', 'action' => 'forgotpassword'), array('title' => 'Forgot your password?')); ?></span> 
     </li> 
     <li id="li-submit"> 
      <button type="submit" title="Log in">Log in &#9658;</button> 
     </li> 
    </ul> 

</fieldset> 

<?php echo $this->Form->end(); ?> 
+0

你不能在登录方法上设置'flashdata',然后重定向到说'dashboard',它只显示一次flashdata? – Ross 2011-05-06 13:57:23

+0

那么重定向目前是自动完成的,但是如何显示setFlash消息来表明你现在已经登录并欢迎回来! – Cameron 2011-05-06 14:54:56

回答

0

这里有一个片段从我的登录方法之一 -

function login() { 
    // check it's a valid user 
    $this->Session->setFlash('You have successfully logged in'); 
    $this->redirect(array('controller'=>'dashboard','action'=>'index')); 
} 

我的仪表盘控制器使用的模板与:它

<?php echo $this->Session->flash(); ?>

在支持(我相信)你问到底是什么在#1

至于#2,您可能必须使用$this->redirect($this->referer());一些运气。有关更多信息,请参阅Take user back to previous page after logging in?

如果你不想自动重定向,你可以使用在beforeFilter

+0

问题是,如果我访问'domain.com/login',那么我会直接得到闪光灯,因为我打电话的方法,并显示该方法的闪光灯没有任何检查登录,但在你的情况下,我不能甚至可以访问登录页面,因为我正被重定向到家中! – Cameron 2011-05-06 15:21:51

0

蛋糕的登录组件

$this->Auth->autoRedirect = false;是从来没有“简单” u_U

1)我有同样的问题。 。setFlash将在下一页显示消息..并且似乎该消息在Auth组件所做的某些重定向中丢失。

尝试@Ross方法,但如果不工作,你可能想overwrite the AuthComponent,并添加setFlash()的登录方法对自己的AuthComponent ..这样的事情:

class MyAuthComponent extends AuthComponent { 
    function login($data = null,$public = false) { 
     $this->Session->setFlash('WELCOME!'); 
     parent::login($data,$public); 
    } 
} 

2)我会复制类API说怎么样重定向

在loginAction混合 网址(定义为字符串或数组) 到处理控制器动作登录。

LoginRedirect混合 通常情况下,如果用户被重定向到 在$在loginAction页面,它们从将被保存在session 进行重定向,使他们能够 成功 登录后重定向的位置 。如果此会话值不是 ,则该用户将被重定向到 在$ loginRedirect中指定的页面。

基本上,Auth组件会读取会话寻找$_SESSION['Auth']['redirect']值,如果没有找到,它将使用LoginRedirect属性。由于您在标题上使用登录页面,所以一个简单的解决方法是始终将$_SESSION['Auth']['redirect']添加到appController中的当前页面。您可以使用$this->here获取当前页面..也许有另一种方式..但我还没有发现任何东西在蛋糕的文档

祝你好运!