我正在尝试使用CakePHP 2.0获取一个简单的登录表单...只是Auth,现在没有ACL。
我能够看到表单并输入数据库中的电子邮件和密码,但我只是返回到表单并显示flash错误消息。这是我的代码:
AppController的:
class AppController extends Controller
{
function beforeFilter()
{
$this->Auth->userModel = 'Users';
$this->Auth->fields = array('username' => 'email', 'password' => 'password'); //have to put both, even if we're just changing one
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->loginRedirect = array('controller' => 'hotels', 'action' => 'dashboard');
$this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
}
}
login.ctp:
<?php
echo $this->Form->create('User', array('action' => 'login'));
echo $this->Form->input('email');
echo $this->Form->input('password');
echo $this->Form->end('Login');
?>
UsersController:
class UsersController extends AppController
{
var $name = 'Users';
var $helpers = array('Html','Form');
var $components = array('Auth','Session');
function beforeFilter()
{
$this->Auth->allow("logout");
parent::beforeFilter();
}
function index() { } //Redirects to login()
function login()
{
if ($this->Auth->login())
{
$this->redirect($this->Auth->redirect());
} else
{
$this->Session->setFlash(__('Invalid username or password, try again'));
}
}
function logout()
{
$this->redirect($this->Auth->logout());
}
}
?>
我感谢任何帮助。谢谢!
答案 0 :(得分:9)
<无效的用户名或密码,再次尝试“错误会在您登录后显示?
您应该检查一些事项:
•$this->Auth->login()
的输出是否与数据库中的信息相同?在提交表单后,将debug($this->Auth->login())
放在登录方法中查看输出。
•密码是否在数据库中正确散列?
•尝试使AuthComponent
可用于所有控制器,而不仅仅是UsersController
。
•不确定这是否有所不同,但在控制器parent::beforeFilter();
方法中的其他任何内容之前调用beforeFilter
。
修改强>
看到您正在尝试根据电子邮件和密码进行验证。默认情况下,AuthComponent需要用户名和密码。您必须明确声明您希望$this->Auth->login()
验证电子邮件和密码。这来自2.0文档:
public $components = array(
'Auth'=> array(
'authenticate' => array(
'Form' => array(
'fields' => array('username' => 'email')
)
)
)
);
我相信您没有看到任何SQL输出这一事实。
答案 1 :(得分:6)
此外,您必须检查数据库中的字段“password”是否设置为VARCHAR 50.
在我看来,我在DB中截断了哈希密码而Auth从未发生过。
答案 2 :(得分:2)
如果您没有使用defalut“username”,“password”进行身份验证,则无法登录 例如,您使用“电子邮件”
您应该在包含登录功能的控制器中编辑组件声明:
$component = array('Auth' => array(
'authenticate' => array(
'Form' => array(
'fields' => array('username' => 'email', 'password' => 'mot_de_passe')
)
)
));
答案 3 :(得分:1)
对cakephp的惯例很不满意。您应该更改此“$ this-&gt; Auth-&gt; userModel ='Users';”到“$ this-&gt; Auth-&gt; userModel ='用户';”因为没有复数的用户是蛋糕中的模型惯例。这对我有用,也适用于大写字母。它差点让我疯狂。祝你好运。
答案 4 :(得分:0)
public $components = array(
'Session',
'Auth' => array(
'loginRedirect' => array(
'controller' => 'Events',
'action' => 'index'
),
'logoutRedirect' => array(
'controller' => 'Users',
'action' => 'login',
'home'
),
'authenticate' => array(
'Form' => array(
'fields' => array('username' => 'username','password' => 'password')
)
)
)
);
答案 5 :(得分:0)
在AppController中编辑组件声明对我来说很有用。如果您的字段名称不是&#34;用户名&#34;和#34;密码&#34;你应该总是指定它们。在你的情况下,它将是
public $components = array(
'Auth' => array(
'authenticate' => array(
'Form' => array(
'passwordHasher' => 'Blowfish',
'fields' => array('username' => 'email','password' => 'password')
)
)
)
);
答案 6 :(得分:-1)
cakephp教程中有一个错误。 $ this-&gt; Auth-&gt; login()应更改为 $这 - &GT; Auth-&GT;登录($这 - &GT;请求 - &GT;数据)