[英]NO QUERY using CakePHP Authentication component
我正在使用CakePHP 2.2.4,并且已经开始使用Atuh Componenet。
这是我的AppController:
class AppController extends Controller {
public $components = array('Auth', 'Session');
public function beforeFilter() {
$this->Auth->authorize = array('Controller');
$this->Auth->authenticate = array(
'Form' => array (
'scope' => array('User.active' => 1),
'fields' => array('username' => 'email', 'password' => 'password'),
)
);
}
public function isAuthorized($user) {
debug($user);
return true;
}
}
这是我的User.php模型
class User extends AppModel {
public $name = 'User';
/* Relazioni */
public $hasOne = 'Profile';
public $belongsTo = 'Role';
public $hasMany = array(
'Lead' => array(
'className' => 'Lead'
)
);
}
这是我的UserController.php
<?php
App::uses('AppController', 'Controller');
class UsersController extends AppController
{
public $name = 'Users';
public $uses = array();
public function beforeFilter()
{
parent::beforeFilter();
}
public function login()
{
if ($this->request->is('post'))
{
if ($this->Auth->login())
{
debug('Logged');
}
else
{
$this->Session->setFlash('Login non autorizzato', 'default', array('class' => 'errore'), 'login');
}
}
}
public function logout()
{
$this->redirect($this->Auth->logout());
}
}
我在使用Auth Component时遇到一个奇怪的问题,因为在布局的末尾我有sql_dump元素,该元素不会显示任何查询。
但是,如果我输入正确的值,则不会登录
为什么Auth组件不起作用?
编辑:
请求的数据是:
Array
(
[User] => Array
(
[email] => test@test.it
[pwd] => abc
)
)
您在AppController中的代码错误
public function beforeFilter() {
$this->Auth->authorize = array('Controller');
$this->Auth->authenticate = array(
'Form' => array (
'scope' => array('User.active' => 1),
// password != pwd as you post it
'fields' => array('username' => 'email', 'password' => 'password'),
)
);
}
更改为
'fields' => array('username' => 'email', 'password' => 'pwd'),
或确保在您的表单中发布password
而不是pwd
请参阅https://github.com/cakephp/cakephp/blob/master/lib/Cake/Controller/Component/Auth/FormAuthenticate.php以获取有关此问题的文档
我想发布,解决这个问题的答案的人来到这里,谁是无法获得登录使用验证了此示例并不直接适用。
要记住的重要一件事是Auth期望基础数据库列为“用户名”和“密码”。 如果出于某种原因(例如,如果您想通过用户电子邮件进行验证(非常常见),并且更改表的列名以反映此问题),则必须将此事告知Auth。
原因是因为基础查询将失败。 最终,所有在幕后发生的事情都是简单地查询与指定字段匹配的内容。 例如(不精确-仅出于演示目的-选择*不好):
SELECT * FROM users WHERE username = 'blahblahblah' AND password = 'someInsan31yh4sh3dpassw0rd'
如果基础表在“电子邮件”列中缺少“用户名”列,则此查询显然将失败。 导致无法登录,并且通常不表示查询失败(甚至在SQL转储中将其省略)。 然而,在你的AppController下面的代码将解决你的问题:
public $components = array(
'Auth' => array(
'authenticate' => array(
'Form' => array(
'fields' => array('username' => 'columnUsedForValidatingUsername', 'password' => 'columnUserForValidatingPassword')
)
)
)
);
在这种情况下,吉皮的答案是完全正确的。 但我觉得好像是在计算器上回答者你应该为任何人发现这个解释为什么发生问题,并提供非特异性应答。
干杯
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.