我使用的是最新版本的CakePHP(2.5.4,如果我是对的话)&我在尝试登录时遇到问题。
我有一张名为" Accounts",&我的控制器被称为" UsersController.php",model => " user.php的"似乎没有问题,因为我将默认表设置为" Accounts"。我已经提出了注册的观点,并且我使用md5来散列密码并且它能够完美地工作。
但是,当我想登录时,它总是返回false&它没有登录我。
这是我在UsersController.php中的登录功能:
function login(){
if($this->request->is('post'))
{
if($this->Auth->login())
{
$this->Session->setFlash("Vous êtes maintenant connecté !", "notif");
$this->redirect('/');
} else {
$this->Session->setFlash("Les identifiants sont incorrects", "notif", array('type' => 'danger'));
debug(Security::hash($this->request->data['User']['PasswordHash']));
}
}
}
以下是login.ctp的表格:
<?= $this->Form->input('Login', array('placeholder' => 'Login', 'label' => false)); ?>
<b class="tooltip tooltip-bottom-right">Votre nom de compte</b>
</label>
</section>
<section>
<label class="input">
<i class="icon-append fa fa-lock"></i>
<?= $this->Form->input('PasswordHash', array('placeholder' => 'Mot de passe', 'label' => false)); ?>
<b class="tooltip tooltip-bottom-right">Votre mot de passe!</b>
</label>
</section>
</fieldset>
<fieldset>
<section>
<h4>Mot de passe perdu ?</h4>
<p><a style='color:#009900' href="#">Cliquez ici</a> pour réinitialiser le mot de passe.</p>
</section>
</fieldset>
<footer>
<center>
<?php $options = array(
'class' => 'btn-u',
'label' => 'Connexion'
) ?>
<?= $this->form->end($options); ?>
我忘记了我的专栏是否是用户名&amp;密码,而是登录&amp; PasswordHash
另外,这是我的AppController.php:
class AppController extends Controller {
public $components = array(
'Session',
'Cookie',
'Auth');
function beforeFilter(){
Security::setHash('md5');
$this->Auth->allow();
$this->Auth->authenticate = array(
'Form' => array(
'fields' => array('username' => 'Login', 'password' => 'PasswordHash'),
)
);
}
}
我无法登录,我也不明白为什么。我的请求查询如下所示:
SELECT `User`.`Id`, `User`.`Login`, `User`.`PasswordHash`, `User`.`Nickname`, `User`.`Role`, `User`.`AvailableBreeds`, `User`.`Ticket`, `User`.`SecretQuestion`, `User`.`SecretAnswer`, `User`.`Lang`, `User`.`Email`, `User`.`CreationDate`, `User`.`Tokens`, `User`.`NewTokens`, `User`.`LastVote`, `User`.`RecordVersion` FROM `madara`.`accounts` AS `User` WHERE `User`.`Login` = 'Twoast' LIMIT 1
调试显示了与我的表帐户中相同的哈希值。我不确定我做错了什么。
提前致谢!
答案 0 :(得分:0)
您在表格中设置密码字段的大小是多少?它足够长以适应哈希字段吗?我之前有这个,并且必须将它设置为至少50个字符。
答案 1 :(得分:0)
所以,3天后,我终于找到了解决方案。
我的功能登录成为:
function login(){
if($this->request->is('post'))
{
$data = $this->request->data;
$Logined = $this->request->data['User']['Login'];
$PasswordHashed = Security::hash($data['User']['PasswordHash'], 'md5', false);
$user = $this->User->find('first', array(
'conditions' => array(
'User.Login' => $Logined,
'User.PasswordHash' => $PasswordHashed
),
'recursive' => -1
));
if(!empty($user) && $this->Auth->login($user['User'])) {
$this->Session->setFlash("Vous êtes maintenant connecté !", "notif");
$this->redirect('/');
} else {
$this->Session->setFlash("Les identifiants sont incorrects", "notif", array('type' => 'danger'));
}
}
}
所以,这个功能很好用,它只是手动登录。
感谢您的帮助! :)