gpt4 book ai didi

authentication - CakePHP 2 Auth 不工作 - Blowfish

转载 作者:行者123 更新时间:2023-12-02 03:14:26 25 4
gpt4 key购买 nike

我正在使用 CakePHP 2.8.5。它不允许我登录“用户名或密码不正确”。这在文档中看起来非常简单,但对我不起作用。我想知道我的模型/数据结构是否会混淆 CakePHP。我有一个用户模型,但登录名与管理员模型相关联。登录表单和操作在页面模型中(它有多个模型的表单)。

在 AppController 中:

public $components = array(
'DebugKit.Toolbar',
'Flash',
'Session',
'Auth' => array(
'userModel' => 'Admin',
'authenticate' => array(
'Form' => array(
'fields' => array(
'username' => 'email',
'password' => 'password'
),
'passwordHasher' => 'Blowfish'
)
),
'loginAction' => array(
'controller' => 'pages',
'action' => 'login',
),
'logoutRedirect' => array(
'controller' => 'pages',
'action' => 'login',
),
'authError' => 'Please log in',
'authorize' => array('Controller')
)
);

我的登录 View ,在/View/Pages 中。 “电子邮件”是用户名字段:

<?php
echo $this->Form->create('Admin');
echo $this->Form->input('email');
echo $this->Form->input('password');
echo $this->Form->end('Submit');
?>

页面 Controller :

public function login() {

if ($this->request->is('post')) {
if ($this->Auth->login()) {
return $this->redirect($this->Auth->redirect());
} else {
$this->Flash->error(__('Username or password is incorrect'));
}
}}

管理模型的顶部:

App::uses('BlowfishPasswordHasher', 'Controller/Component/Auth');

Admin 模型中的自动 Blowfish 加密:

public function beforeSave($options = array()) {
if (isset($this->data['Admin']['password'])) {
$passwordHasher = new BlowfishPasswordHasher();
$this->data['Admin']['password'] = $passwordHasher->hash(
$this->data['Admin']['password']
);
}
return true;
}

我注意到如果我为不同的管理员输入相同的密码,我会得到不同的加密结果,但我发现这是正常的。

如果你还想看什么,我再补充。

最佳答案

userModel 键位置错误

比较问题中的配置:

public $components = array(
'DebugKit.Toolbar',
'Flash',
'Session',
'Auth' => array(
'userModel' => 'Admin',
'authenticate' => array(
'Form' => array(
'fields' => array(
'username' => 'email',
'password' => 'password'
),
'passwordHasher' => 'Blowfish'
)
),

到配置in the docs :

$this->Auth->authenticate = array(
'Basic' => array('userModel' => 'Member'),
'Form' => array('userModel' => 'Member')
);

在问题中 userModel 是顶级 key ,在文档中它是个人身份验证 key 的一部分。看着 api examples (或源代码中的文档 block )错误更清楚:

... you can define settings that should be set to all authentications objects using the 'all' key:

$this->Auth->authenticate = array(
'all' => array(
'userModel' => 'Users.User',
'scope' => array('User.active' => 1)
),
'Form',
'Basic'
);

可以为所有要使用的身份验证对象定义全局 userModel,但语法与问题完全不同。

使用全键

因此要定义用于所有身份验证选项的用户模型,请使用 all 键:

public $components = array(
'DebugKit.Toolbar',
'Flash',
'Session',
'Auth' => array(
//'userModel' => 'Admin', // <- no
'authenticate' => array(
'all' => array(
'userModel' => 'Admin' // <- yes
),
'Form' => array(
'fields' => array(
'username' => 'email',
'password' => 'password'
),
'passwordHasher' => 'Blowfish'
)
),

关于authentication - CakePHP 2 Auth 不工作 - Blowfish,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37972177/

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