创建一个基本的登录页面 - 它正在工作,但后来我们改变了我们的数据库,我们的重定向不再有效。
当我们登录该站点时,回来说用户名/密码不正确,在检查了站点正在检查数据库的sql代码之后 - 它正在发送正确的信息但不允许我们登录。
我们希望用户在登录网站时重定向到ebox(控制台)主页(查看)。
这是控制器中用于登录的代码
public function login(){
$this->set('title_for_layout', 'Individual Registration');
$this->set('stylesheet_used', 'style');
$this->set('image_used', 'eBOXLogo.jpg');
if ($this->request->is('post')){
if ($this->Auth->login()){
$username = $this->request->data['User']['username'];
if (0 === $this->User->find('count',array('conditions'=>array('activated'=>true,'username'=> $username)))){
$this->Session->setFlash('Sorry, your account is not validated yet.');
$this->redirect($this->referer());
}
else{
$this->Auth->user('id');
$this->redirect( array('controller' => 'Eboxs','action' => 'home'));
}
}
else{
$this->Session->setFlash('Username or password is incorrect');
}
}else{
$this->Session->setFlash('Welcome, please login');
}
}
这是视图的代码
<?php
echo $this->Form->create('User', array('action' => 'login'));
echo $this->Form->input('username');
echo $this->Form->input('password');
echo $this->Form->end('Login');
?>
答案 0 :(得分:1)
I think try this
//app controller
class AppController extends Controller {
public $components = array(
'Acl',
'Auth' => array(
'authorize' => array(
'Actions' => array('actionPath' => 'controllers')
)
),
'Session'
);
public function beforeFilter() {
//Configure AuthComponent
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
$this->Auth->loginRedirect = array('controller' => 'posts', 'action' => 'add');
}
}
//login action view
echo $this->Form->inputs(array(
'legend' => __('Login'),
'username',
'password'
));
//this is controller code
if ($this->request->is('post')) {
if ($this->Auth->login()) {
$this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash('Your username or password was incorrect.');
}
}
答案 1 :(得分:0)
在更改数据库时,在core.php文件中启用调试模式为“2”,或者可以删除模型缓存。您可以稍后在生产站点中将调试模式更改为0。还要检查新数据库的users表中是否有有效的用户名和密码。还要检查密码字段的结构。它应该是varchar 255。
同时将上述逻辑修改为 -
if ($this->Auth->login()){
$username = $this->request->data['User']['username'];
if (0 === $this->User->find('count',array('conditions'=>array('activated'=>true,'username'=> $username)))) {
$this->Session->setFlash('Sorry, your account is not validated yet.');
$this->redirect($this->referer());
} else {
$this->Auth->user('id');
$this->redirect( array('controller' => 'Eboxs','action' => 'home'));
}
}
在视图文件中而不是使用
echo $this->Form->create('User', array('action' => 'login'));
尝试使用 -
echo $this->Form->create('User', array('url' => array('controller' => 'users', 'action' => 'login')));
答案 2 :(得分:0)
以下情况可以检查代码无效的原因:
您是否在用户模型中使用了beforeFilter()方法?
如果是,请检查它的含义。
将您的“登录”方法放在UsersController的beforeFilter中的Auth-&gt; allow()方法中。
function beforeFilter(){
$this->Auth->allow('login');
}
请检查保存到数据库中的关联散列密码是否等于您为该对应用户输入的密码。您可以使用以下语法检查Auth哈希密码:
pr(AuthComponent::password('USER PASSWORD HERE'));
您可以使用以下语法创建表单:
echo $this->Form->create('User', array('url' => $this->request->params));
请问它是否仍然不适合你。