我想在现有数据库上使用纯文本密码字段实现CakePHP 2网站。
这是我的AppController
class AppController extends Controller {
public $components = array(
'Session',
'Auth' => array(
'loginRedirect' => array('controller' => 'users', 'action' => 'index'),
'logoutRedirect' => array('controller' => 'users', 'action' => 'home'),
'authError' => 'You cannot view this page',
'authorize' => array('Controller'),
'authenticate' => array(
'Form' => array(
'userModel' => 'User',
'fields' => array('username' => 'user_id', 'password' => 'user_password')
)
)
)
);
public function isAuthorized($user) {
return true;
}
function beforeFilter() {
$this->Auth->allow('home');
//$this->Auth->authenticate = $this->User;
parent::beforeFilter();
}
这是我的UserController。
class UsersController extends AppController {
public $paginate = array(
'fields' => array('user_id', 'user_desc', 'user_password'),
'limit' => 25,
'order' => array(
'user_id' => 'asc'
)
);
function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
$this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash('Cannot Login');
}
}
}
}
这是我的用户模型
class User extends AppModel {
public $name = 'User';
public $primaryKey = 'user_id';
public $belongsTo = 'Group';
}
根据上面的那些文件,当我按下login.ctp上的Login按钮时,我看到了
从user_password ='this_is_hashing_password'
的用户中选择*
在sql转储部分。
那么,如何关闭自动哈希算法,所以login()会将用户输入与数据库存储密码进行比较为纯文本???
我在CakePHP书上尝试了很多阅读,但是我找不到任何东西,也使用了从互联网上找到的hashPasswords($ data)技术。
请帮忙。 Kongthap。
答案 0 :(得分:2)
最好的答案确实批量处理您存储的密码以便对它们进行哈希处理,但是在某些情况下,您可能会将Cake应用程序添加到现有应用程序中,这些应用程序会以不同的方式记录密码(例如根本没有对它们进行散列),所以即使这种情况下的目标不是,这个问题也是有效的。
尝试使用这些资源修改Cake的密码散列函数,具体取决于您的Cake版本:
答案 1 :(得分:0)
我在Cakephp 3
中使用了纯文本密码,该密码仅用于 DEVELOPMENT 目的,切勿在生产环境中以纯文本格式存储密码。
也就是说,在开发过程中,纯文本密码使我可以专注于登录,而不是实现功能齐全的用户加密/解密逻辑。无论如何,它将被OAuth / SAML模块取代...
好的,下面是源代码:
<?php
namespace App\Auth;
use Cake\Auth\AbstractPasswordHasher;
/**
* Plain text password for demo use, DO NOT PUSTH THIS TO PROD
*/
class PlainTextPasswordHasher extends AbstractPasswordHasher
{
public function hash($password)
{
return $password;
}
public function check($password, $hashedPassword)
{
return $password === $hashedPassword;
}
}
<?php
class PagesController extends AppController
{
public function initialize()
{
parent::initialize();
$this->loadComponent('Auth', [
'authenticate' => [
'Form' => [
'fields' => [
'username' => 'username',
'password' => 'password',
],
'passwordHasher' => [
'className' => 'PlainText',
],
'userModel' => 'YourUsers',
]
],
'loginAction' => [
'controller' => 'Logins',
'action' => 'login'
]
]);
}
}
来源:这段视频https://www.youtube.com/watch?v=eASSNS1f3V4和官方文档的这一部分:https://book.cakephp.org/3.0/en/controllers/components/authentication.html#creating-custom-password-hasher-classes