关闭Authcomponent Cake PHP

时间:2015-08-01 03:43:33

标签: php mysql cakephp hash

我正在尝试将登录屏幕放在我的应用程序中。 已经建立并运行该模型。

现在根据CakePHP 3.x食谱我已将以下内容添加到我的代码中。

// In src/Controller/AppController.php
namespace App\Controller;
use Cake\Controller\Controller;
class AppController extends Controller
{
public function initialize()
{
$this->loadComponent('Flash');
$this->loadComponent('Auth', [
'authenticate' => [
'Form' => [
'fields' => [
'username' => 'email',
'password' => 'password'
]
]
],
'loginAction' => [
'controller' => 'Users',
'action' => 'login'
]
]);
// Allow the display action so our pages controller
// continues to work.
$this->Auth->allow(['display']);
}
}

//在src / Controller / UsersController.php

public function login()
{
if ($this->request->is('post')) {
$user = $this->Auth->identify();
if ($user) {
$this->Auth->setUser($user);
return $this->redirect($this->Auth->redirectUrl());
}
$this->Flash->error('Your username or password is incorrect.');
}
}

在login.ctp中

<h1>Login</h1>
<?= $this->Form->create() ?>
<?= $this->Form->input('email') ?>
<?= $this->Form->input('password') ?>
<?= $this->Form->button('Login') ?>
<?= $this->Form->end() ?>

我启动并运行了屏幕。 但随后发现密码需要散列。 mysql数据库中没有哪个。我在我的数据库中使用sha1散列了密码。 但发现默认情况下cakephp使用bcrypt,因此使用弱“sha1”密码配置它。

但是密码中添加了一个salt值,这使得两个密码都不匹配。我该如何解决这个问题?

我也很好地转换了散列功能,在SO中找到了一些关于它的链接。但没有一个是蛋糕php 3x。 在文档中,如果我不想使用散列功能,它提到关闭auth组件。但我想用它。

欢呼声,

Saurav

1 个答案:

答案 0 :(得分:0)

试试这个,你的问题肯定会解决: -

// src/Model/Entity/User.php
namespace App\Model\Entity;

use Cake\Auth\DefaultPasswordHasher;
use Cake\ORM\Entity;

class User extends Entity
{

    // Make all fields mass assignable for now.
    protected $_accessible = ['*' => true];


    protected function _setPassword($password)
    {
        return (new DefaultPasswordHasher)->hash($password);
    }
}