我在蛋糕php上使用Auth组件,这个组件不起作用

时间:2011-10-26 12:30:43

标签: cakephp components authentication

我在cake php上使用Auth组件,这个组件不起作用。

我的表是:

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(50) default NULL,
  `password` varchar(100) default NULL,
  `role` varchar(50) default 'www',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

我的UsersController是:

class UsersController extends AppController {

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

    function beforeFilter() {
        $this->Auth->login($this->data);
        $this->set('aya',$this->data);
        $this->Auth->loginAction= array ('controller'=>'users','action'=>'login');
        $this->Auth->loginRedirect = array ('controller'=>'users','actions'=>'edit','1');
        $this->Auth->deny('delete');
    }

    function login() {
    }

    function logout() {
    $this->redirect($this->Auth->logout());
    }

我的login.ctp文件是:

if($session->check('Message.auth'))
        $session->flash('auth');
echo $form->create('User', array ('action','login'));
echo $form->input('usrname');
echo $form->input('password', array ('type','password'));
echo $form->end('Login');

但这不起作用

为什么呢? 谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

你可以定义不工作吗?它给你一个错误?什么也没做?

我认为既然你只是在用户控制器中添加auth组件而不是在appController中,这将使组件只能在用户操作中工作。而且由于您只在UsersController中登录和注销,并且允许此功能,因此该组件将不执行任何操作,只需使您的用户/登录自动运行...

我的建议是你移动这个

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

function beforeFilter() {
    $this->Auth->login($this->data);
    $this->set('aya',$this->data);
    $this->Auth->loginAction= array ('controller'=>'users','action'=>'login');
    $this->Auth->loginRedirect = array ('controller'=>'users','actions'=>'delete');
    $this->Auth->deny('delete');
}

到您的AppController,它应该工作

编辑:

再次阅读你的代码,我发现了很多错误:

  1. $this->Auth->login($this->data);你不应该使用这个,阅读手册,即手动登录,通常是基于ajax的手册,这将在你每次输入时获得任何后期数据,并为所有动作登录...所以删除这一行
  2. $this->Auth->loginRedirect = array ('controller'=>'users','actions'=>'delete');您是在向用户登录删除操作后发送的吗?建议:尝试使用索引或其他内容。
  3. $this->Auth->deny('delete');除非你把它放在allowedActions中或者使用allow('delete')之前已经被拒绝了......删除这一行是因为它是无效的,一切都被拒绝,除非另有说法
  4. 请阅读this tutorial,以便了解您遗失的内容和额外费用。它应该像这样工作:D

答案 1 :(得分:0)

  • 将在每个请求中调用beforeFilter()。 $ this->数据将包含该请求的POST数据,而不仅仅是登录信息。这就是你想要的吗?

  • 您将loginRedirect设置为delete ??

  • echo $form->create('User', array ('action'=>'login')); echo $form->input('username'); echo $form->input('password', array ('type'=>'password'));

我不知道你想要实现什么,所以我不能告诉你如何编写代码。阅读手册:http://book.cakephp.org/view/1250/Authentication