我想这是一个愚蠢的问题,但我无法登录我正在Cake建立的网站的受限制部分。
为了开始,我发现$this->request->data['Usuario']['clave']
中的密码字符串与模型中SimplePasswordHasher
函数中使用beforeSave
的散列字符串不同。我还应该说模型不是默认的用户模型,因为我正在为西班牙语编写应用程序而我不想使用默认模型,所以我的组件配置是:
class AppController extends Controller {
/*function beforeFilter() {
date_default_timezone_set('America/Mexico_City');
}*/
public $components = array(
'Session',
'Auth' => array(
'Form'=>array(
'userModel' => 'Usuario',
'unauthorizedRedirect' => false,
'loginRedirect' => array(
'controller' => 'ComplejosResidenciales',
'action' => 'index'
),
'logOutRedirect' => array(
'controller' => 'Usuarios',
'action' => 'index'
),
'fields' => array(
'username' => 'usuario',
'password' => 'clave'
),
'authorize' => 'Controller'
)
)
);
}
所以我决定不对密码字段进行散列,但仍无济于事。 我希望任何人都可以帮我一把,因为我是CakePHP的新手而且不知道如何解决它。
我认为它必须是Auth->login()
方法的东西,因为我不遵循这里的约定,但我不知道如何配置所述方法。目前如下:
public function login() {
if($this->request->is('post')) {
if($this->Auth->login()) {
return $this->Auth->redirectUrl($this->Auth->redirectUrl());
}
else {
$this->Session->setFlash(__('Las credenciales proporcionadas no son correctas'), 'default', array(), 'auth');
}
正如rrd指出的那样,我的$ components数组是错误的,所以我把它改为:
public $components = array(
'Session',
'Auth'=>array('loginRedirect'=>array('controller'=>'ComplejosResidenciales', 'action'=>'index'), 'logOutRedirect'=>array('controller'=>'Usuarios', 'action'=>'index'), 'loginAction'=>array('controller'=>'Usuarios', 'action'=>'login'), 'authenticate'=>array('Form'=>array('userModel'=>'Usuario', 'fields'=>array('username'=>'usuario', 'password'=>'clave')))));
根据cakephp.org ,哪个更好
不要在authenticate或Form元素中放置其他Auth配置键(如authError,loginAction等)。它们应与验证密钥处于同一级别。
但它没有用。
一直在努力,我无法掌握它,我希望有人能指出我做错了什么。在我的AppController中,我已经声明了组件和beforeFilter函数,如下所示:
public $components = array('Auth'=>array('loginRedirect'=>array('controller'=>'ComplejosResidenciales', 'action'=>'index'),
'logoutRedirect'=>array('controller'=>'Usuarios', 'action'=>'login'),
), 'Session');
public function beforeFilter(){
$this->Auth->authenticate = array(
AuthComponent::ALL => array('userModel' => 'Usuario', "fields" => array("username" => "usuario", "password" => "clave"), 'Form'));
}
然后我在UsuariosController中有登录功能(显然我猜),如下所示:
public function login() {
if($this->request->is('post')) {
if($this->Auth->login()) {
return $this->Auth->redirectUrl($this->Auth->loginRedirect);
}
else {
$this->Session->setFlash(__('Las credenciales proporcionadas no son correctas'), 'default', array(), 'auth');
}
}
}
但我只是看到“Las credenciales proporcionadas no son correctas”的消息。我不知道我是否正在$this->Auth->login()
部分中正确调用Auth组件的方法,因为显然我没有结果这样调用它,没有参数,但我尝试用参数{{1调用它因此,它与我在用户名和密码字段中写的内容无关,任何事情都会通过,当然这很糟糕。
现在我知道为什么编码$this->request->data
会导致无限制访问:
在2.x $ this-> Auth->登录($ this-> request-> data)将使用所发布的任何数据记录用户,而在1.3 $ this-> Auth- >登录($ this-> data)会先尝试识别用户,但只有在成功时才会登录。
根据蛋糕手册。我似乎无法正确阅读有关此问题的任何文件。无论如何,我求求有人帮助我,因为我在这里匆忙。在阅读了一些其他文档之后,我想Auth组件应该正确处理所有内容,只要我提供正确的配置,所以我最终在AppController中进行$this->Auth->login($this->request->data)
调用,如下所示:
beforeFilter()
然后,在我的“UsuariosController”中,我做了:
var $components = array('Auth', 'Session');
public function beforeFilter() {
$this->Auth->loginAction = array('controller'=>'Usuarios', 'action'=>'login');
$this->Auth->redirectLogin = array('controller'=>'ComplejosResidenciales', 'action'=>'add');
$this->Auth->authenticate = array('Form'=>array('userModel'=>'Usuario', 'fields'=>array('username'=>'usuario', 'password'=>'clave')));
}
我有登录和注销功能,非常简单,但它不起作用,它不会在登录时重定向我也不会让我访问任何其他控制器,它似乎什么都不做。请帮忙!
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('index', 'view', 'add', 'edit', 'delete');
}
答案 0 :(得分:0)
你应该改变更多的东西。
$ components应该是这样的:
public $components = array(
'Session',
'Auth' => array(
'authenticate' => array(
'Form' => array(
'fields' => array('username'=>'usuario', 'password'=>'clave')
)
)
)
);
我不确定userModel,请查看手册。
比你应该实现isAuthorized
function isAuthorized($user){
if(in_array($this->action, array('view', 'edit')))
return true;
return false;
}
您的案例不需要beforeFilter。
您的登录方法是这样的。
public function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
return $this->redirect($this->Auth->redirectUrl());
}
else {
$this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth');
}
}
}
同样,我建议您阅读上面提到的手册或书籍。它有一个免费的样本,我想你会得到主要的想法。