[英]CakePHP 2.4 Auth->login() always return FALSE
我正在为我的妈妈开发一个带有Cake 2.4的简单登录应用程序。 这是用户模型的代码。
App::uses('SimplePasswordHasher', 'Controller/Component/Auth');
class User extends AppModel{
public $validate = array(
'username' => array(
'required' => array(
'rule' => array('notEmpty'),
'message' => 'A username is required'
)
),
'password' => array(
'required' => array(
'rule' => array('notEmpty'),
'message' => 'A password is required'
)
)
);
public function beforeSave($options = array()) {
if(isset($this->data[$this->alias]['password'])) {
$passwordHasher = new SimplePasswordHasher();
$this->data[$this->alias]['password'] = $passwordHasher->hash(
$this->data[$this->alias]['password']
);
}
return true;
}
}
我的UsersController代码是...
class UsersController extends AppController{
public $helpers = array('Html','Form');
public function beforeFilter(){
parent::beforeFilter();
$this->Auth->allow('add');
}
public function add(){
if($this->request->is('post')){
$this->User->create();
if($this->User->save($this->request->data)){
$this->Session->setFlash(__('The user has been saved'));
return $this->redirect(array('action' => 'index'));
}
$this->Session->setFlash(__('The user could not be saved. Please, try again.'));
}
}
public function login(){
$this->layout = 'mlayout';
if($this->request->is('post')){
debug($this->Auth->login());
var_dump($this->request->data);
if($this->Auth->login()){
$this->Session->setFlash('Logged In');
//return $this->redirect($this->Auth->redirectUrl());
}else{
$this->Session->setFlash(__('Usuario o Contraseña invalido, intentelo de nuevo.'));
}
}
}
public function logout(){
return $this->redirect($this->Auth->logout());
}
}
AppController代码:
class AppController extends Controller{
public $components = array('Session',
'Auth' => array(
'loginRedirect' => array(
'controller' => 'homes',
'action' => 'index'
),
'logoutRedirect' => array(
'controller' => 'homes',
'action' => 'index'
),
'authorize' => 'controller'
)
);
public function beforeFilter(){
$this->Auth->allow('index','view','login');
}
}
Login.ctp
<table id="formtable">
<form id="UserForm" method="post" action="/mercadito/users/login">
<tr>
<td align="right">Login -> </td>
<td><input type="text" name="username" style="width: 150px; height: 30px;"/></td>
</tr>
<tr>
<td align="right">Contraseña -> </td>
<td><input type="password" name="password" style="width: 150px; height: 30px;"/></td>
</tr>
<tr>
<td></td>
<td align="center"><input type="submit" value="ENTRAR" style="width: 100px; height: 30px;"/></td>
</tr>
</form>
</table>
debug($this->Auth->login()) returns: /app/Controller/UsersController.php (line 23) false
var_dump() returns: array(2) { ["username"]=> string(9) "admin" ["password"]=> string(9) "admin" }
每次都会发生这种情况。 我更改了allow->('login')
,然后检查密码是否正确地进行了哈希处理。 但是问题仍然存在。
您应该使用$ this-> Form-> input()方法创建字段,因为Cake期望的字段应类似于:
data[User][username]
data[User][password]
因此,您的代码应类似于:
<?php echo $this->Form->create('User'); ?>
<fieldset>
<?php
echo $this->Form->input('username');
echo $this->Form->input('password');
?>
<?php echo $this->Form->submit(__('Login'));?>
</fieldset>
<?php echo $this->Form->end(); ?>
我敢打赌,如果您尝试使用空密码,它应该让您进入,因为它总是会加密空变量:)
尝试在您的组件中扩展Component-Variable
AppController的:
class AppController extends Controller{
public $components = array('Session',
'Auth' => array(
'loginRedirect' => array(
'controller' => 'homes',
'action' => 'index'
),
'logoutRedirect' => array(
'controller' => 'homes',
'action' => 'index'
),
'authorize' => 'controller'
),
'Form' => array(
'passwordHasher' => array(
'className' => 'Simple',
'hashType' => 'sha256'
)
)
);
确保在数据库中输入密码varchar(40)
或varchar(40+)
因为cakephp的哈希算法将生成36 characters
字符串。
我不明白您为什么接受错误的答案。 由于您正尝试使用电子邮件地址进行身份验证,因此应在login.ctp中更改name属性,如下所示:
<input type="text" name="username" style="width: 150px; height: 30px;"/>
至
<input type="text" name="email" style="width: 150px; height: 30px;"/>
我遇到了同样的问题,为我解决的问题是将$ this-> alias更改为User,所以beforeSave()现在看起来像
public function beforeSave($options = array()) {
if (isset($this->data['User']['password'])) {
$this->data['User']['password'] = AuthComponent::password($this->data['User']['password']);
}
return true; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.