gpt4 book ai didi

CakePHP - 如何实现密码的河豚散列?

转载 作者:行者123 更新时间:2023-12-04 17:22:06 25 4
gpt4 key购买 nike

正在努力寻找有关在 Cake 2.4 中使用 Blowfish 的一些基本问题的答案。

AppController.php

public $components = array(
'Auth' => array(
'authenticate' => array(
'Form' => array(
'fields' => array(
'username' => 'email'
),
'passwordHasher' => 'Blowfish'
)
)
),
'Cookie',
'Session'
);

现在怎么办?如何登录?

UsersController.php
public function login() {

if (!empty($this->request->data)) {

if ($this->Auth->login()) {
$this->redirect($this->Auth->redirectUrl());
}

}
}

我需要添加什么?如果我尝试登录,则会收到以下错误:

警告 (512):无效盐:河豚请访问 http://www.php.net/crypt并阅读有关构建河豚盐的相应部分。 [CORE/Cake/Utility/Security.php,第 285 行]

我是否需要在尝试登录之前对密码加盐,如果是,我使用哪种方法以及对加盐最好的方法是什么? Cake 是否会自动尝试使用 中的盐? core.php 所有用户的配置文件?

我很困惑,主要是因为我不知道 CakePHP 试图自动为我做的标准 PHP 方式中使用河豚的哪些部分。

最佳答案

如果您已经有一个数据库填充了使用另一种方法散列的密码,则不能使用 Blowfish。如果是这样,它们将不是有效的 Blowfish 哈希密码,您将收到上述错误。

关于在 CakePHP 应用程序中实现 Blowfish 进行密码散列,Cookbook 有一个专门的部分是关于在身份验证中使用 bcrypt (Blowfish):http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#using-bcrypt-for-passwords

您像之前一样设置了 components 数组:

<?php
class AppController {

public $components = array(
'Auth' => array(
'authenticate' => array(
'Form' => array(
'passwordHasher' => 'Blowfish'
)
)
)
);
}

然后要生成密码,您将在模型中使用密码哈希器类。例如, User模型:
<?php
App::uses('BlowfishPasswordHasher', 'Controller/Component/Auth');

class User extends AppModel {

public function beforeSave($options = array()) {
// if ID is not set, we're inserting a new user as opposed to updating
if (!$this->id) {
$passwordHasher = new BlowfishPasswordHasher();
$this->data[$this->alias]['password'] = $passwordHasher->hash($this->data[$this->alias]['password']);
}
return true;
}
}

然后验证你真的不需要做任何事情,因为 CakePHP 的验证处理程序会为你做密码比较:
<?php
class UsersController extends AppController {

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 incorrect'));
}
}
}
}

这就是全部。

关于CakePHP - 如何实现密码的河豚散列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21113819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com