我在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');
但这不起作用
为什么呢? 谢谢你的帮助。
答案 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,它应该工作
编辑:
再次阅读你的代码,我发现了很多错误:
$this->Auth->login($this->data);
你不应该使用这个,阅读手册,即手动登录,通常是基于ajax的手册,这将在你每次输入时获得任何后期数据,并为所有动作登录...所以删除这一行$this->Auth->loginRedirect = array ('controller'=>'users','actions'=>'delete');
您是在向用户登录删除操作后发送的吗?建议:尝试使用索引或其他内容。$this->Auth->deny('delete');
除非你把它放在allowedActions中或者使用allow('delete')之前已经被拒绝了......删除这一行是因为它是无效的,一切都被拒绝,除非另有说法请阅读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