在我的数据库中,我有用户表,一个记录 - 用户,密码用md5进行哈希。
问题是我每次尝试使用正确的admin / pass登录时都会收到错误的用户/通行证登录信息。
这是我的控制器:
class UsersController extends AppController {
var $name = 'Users';
function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow(array('*'));
}
function login() {
//debug($this->data);
if ($this->Session->read('Auth.User')) {
$this->Session->setFlash('You are logged in!');
}
}
function logout() {
$this->redirect($this->Auth->logout());
}
}
来自appControler
class AppController extends Controller {
var $components = array('Auth', 'Session');
function beforeFilter() {
//debug($this->data);
//Security::setHash('md5');
$this->Auth->allow('admin_index', 'index', 'login', 'logout');
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'index');
$this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'logout');
$this->Auth->loginRedirect = array('controller' => 'posts', 'action' => 'index');
}
}
login.ctp:
<div class="login">
<?
$session->flash('auth');
echo $form->create('User', array('action' => 'login'));
echo $form->inputs(array('legend' => __('Login', true), 'username', 'password'));
echo $form->end('Login');
?>
</div>
这是来自app_controller的调试消息
Array
(
[User] => Array
(
[username] => admin
[password] => pass
)
)
并从用户控制器调试消息:
Array
(
[User] => Array
(
[username] => admin
[password] => 8e2665a3fe6983fa38464685ac4a3d9c93a3d301
//this is not empty anymore but it is not same as in database
)
)
这里是sql代码,这很好,但用户传递哈希是错误的。
SELECT `User`.`id`, `User`.`username`, `User`.`password`, `User`.`email`, `User`.`created` FROM `users` AS `User` WHERE `User`.`username` = 'admin' AND `User`.`password` = '09b98f2308740bf305ce1e1097d02ded' LIMIT 1
可能是什么问题?我是cakephp的新手。 Tnx提前
答案 0 :(得分:2)
user303832,
您必须通过login, logout
将$this->Auth->allow(
添加到您允许的操作集中。
<强> Edit0:强> 另一个常见的失败点是省略了密码确认字段,导致先前密码的散列被再次散列并保留在数据库中。 由于密码现在是双线,因此用户无法再登录。它非常常见,它有自己的名称(ninjahash)Ü。
<强> EDIT1:强> 我深表歉意:请将您的行改回:
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
和
$this->Auth->logoutRedirect = array('controller' => 'users','action' => 'login');
此外,请确保将数据库表配置为使用char(40)作为密码(@haprax:这是本书即使对sha1也是如此)。
答案 1 :(得分:1)
不要尝试使用任何其他格式的散列,因为cakephp没有提到任何特定的散列格式。根据我的说法,Cakephp根据安全性将其转换。我们在cakephp的cofig文件中更改的值和解密值。
因此,解决方案是在实现auth组件后创建一个用途,然后Cake php将以自己的格式创建密码,然后尝试登录。