我正在尝试在Cakephp 3.0网站上登录用户。我的表有一个'用户名'和'密码'字段,命名为。我可以添加一个用户,我的密码成功地被哈希并存储在我的表中。尽管如此,我甚至无法登录一次。
我的AppController initialize()方法:
$this->loadComponent('Auth',['loginAction' => [
'controller' => 'ShopOwners',
'action' => 'login'
],'authenticate' => [
'Form' => [
'fields' => [
'username' => 'username',
'password' => 'password',
],
'userModel' => 'ShopOwners'
]
],'loginRedirect' => [
'controller' => 'ShopOwners',
'action' => 'view'
],
]);
$this->Auth->allow(['home','add']);
我的控制器中的登录视图功能
public function login(){
$this->log('Inside login','debug');
if($this->request->is('post')){
$this->log('Inside login is post','debug');
$shopOwner = $this->Auth->identify();
if($shopOwner){
$this->log('Inside is owner','debug');
$this->Auth->setUser($shopOwner);
return $this->redirect($this->Auth->redirectUrl());
}
$this->Flash->error(__('Invalid username or password, try again'));
}
}
最后我的登录视图文件login.ctp
<h1>Login</h1>
<?= $this->Form->create(); ?>
<?= $this->Form->input('username'); ?>
<?= $this->Form->input('password'); ?>
<?= $this->Form->button(__('Login')); ?>
<?= $this->Form->end(); ?>
我尝试过在网站和其他地方提供的许多解决方案来尝试修复此问题。其中包括:
Cakephp的新手,现在已经被困在这一天了一整天。非常感谢任何帮助。
编辑:有人至少可以告诉我为什么识别()没有返回任何东西。我在控制器的登录功能中做了一个跟踪并返回App\Controller\ShopOwnersController::login() -
APP/Controller\ShopOwnersController.php, line 132
Cake\Controller\Controller::invokeAction() -
CORE\src\Controller\Controller.php, line 405
Cake\Routing\Dispatcher::_invoke() -
CORE\src\Routing\Dispatcher.php, line 114
Cake\Routing\Dispatcher::dispatch() -
CORE\src\Routing\Dispatcher.php, line 87
[main] - ROOT\webroot\index.php, line 37
结束于:
Undefined variable: _SESSION [CORE\src\Network\Session.php, line 436]
为什么它会在index.php停止?可能有什么不对?在我检查的索引中
print_r(Request::createFromGlobals());
我可以看到我的数据数组包含用户名和密码,但仍然没有。密码是文本而不是哈希,是问题吗?
编辑2:我的请求对象包含以下
[params] => Array ( [plugin] => [controller] => [action] => [_ext] => [pass] => Array ( ) )
[data] => Array ( [username] => user9 [password] => user9 )
[query] => Array ( )
为什么我的查询数组为空?它应该是??
编辑3 - 我尝试发送密码的哈希版本并将请求 - &gt;数据['密码']重置为哈希版本。这不起作用,因为
答案 0 :(得分:4)
如果您没有使用名为“Users”的表来存储用户名和密码,您需要告诉CakePHP,如本手册的本节所述:
基本上你需要将它添加到你的AuthComponent配置中:
$this->loadComponent('Auth',['loginAction' => [
'controller' => 'ShopOwners',
'action' => 'login'
],'authenticate' => [
'Form' => [
'userModel' => 'ShopOwners', // Added This
'fields' => [
'username' => 'username',
'password' => 'password',
]
]
],'loginRedirect' => [
'controller' => 'ShopOwners',
'action' => 'view'
],
]);
要记住的一件重要事情是密码哈希值通常很长,因此请确保数据库中的密码列足够大(我使用255以防万一)