我遇到了cake的auth问题,我似乎无法过去(我在过去两天一直在调试和尝试不同的教程)。据我所知,它应该非常简单,问题是每当我尝试登录时,它只是刷新登录页面。我不能为我的生活找出原因!我唯一的结论是必须有一些(基本的)教程是理所当然的,我错过了。
以下是几个片段:
users_controller.php中
class UsersController extends AppController {
var $name = 'Users';
function beforeFiler() {
parent::beforeFilter();
}
function login() {
}
function logout() {
$this->Session->setFlash('You have successfully logged out.');
$this->redirect($this->Auth->logout());
}
}
app_controller.php
class AppController extends Controller {
var $helpers = array('Html','Form','Javascript');
var $components = array('Auth');
function beforeFilter() {
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->loginRedirect = array('controller' => 'contents', 'action' => 'index');
$this->Auth->logoutRedirect = array('controller' => 'contents', 'action' => 'view');
$this->Auth->loginError = 'Something went wrong';
$this->Auth->allow('register', 'view');
$this->Auth->authorize = 'controller';
$this->set('loggedIn', $this->Auth->user('id'));
}
function isAuthorized() {
return true;
}
}
login.ctp
<div class="midCol short">
<h3>Login</h3>
<div class="loginBox">
<?php e($form->create('User', array('controller'=>'users','action'=>'login')));?>
<?php
echo $this->Form->input('username');
echo $this->Form->input('password');
e($this->Form->end(array('label'=>'Login', 'class'=>'loginButton button png')));?>
</div>
</div>
任何帮助都会非常感激,这让我撕裂了我的头发!
答案 0 :(得分:2)
仅供参考,因为我很难在网上找到CakePHP 2.x的答案。这些东西需要“正确”才能使用表单身份验证:
配置需要正确,例如在您的UsersController中(只有在DB中名称不同时才需要字段配置):
public $components = array(
'Auth' => array(
'authenticate' => array(
'Form' => array(
'fields' => array(
'username' => 'username',
'password' => 'password'
),
)
)
)
);
您必须使用表单助手:表单 - >创建添加隐藏的输入字段(“post”),并且Form-&gt; input()生成的输入字段的名称遵循以下约定: Auth组件需要。
用户 - >登录不得将自定义数据传递给Auth-&gt; login()。 Auth组件将从表单(=请求)中获取auth数据。
答案 1 :(得分:0)
感谢您的建议,但我最终废弃它并从头开始重建。不完全确定它为什么最初破坏,可能不会用美式英语调用内置函数!
答案 2 :(得分:0)
在您登录之前,Auth组件将重定向到该页面。如果该页面是将重定向到的登录页面。
当您进行测试时,您可能正在刷新登录页面,因此成功登录时,您将被重定向到。您可以在登录后尝试执行受Auth保护的操作来检查这一点。
这给我带来了很多麻烦 - 我认为该组件的当前功能在这方面有点笨拙。
答案 3 :(得分:0)
我遇到了完全相同的问题,发现我必须重启mySQL服务。重新启动后,我停止了重定向登录页面。希望有所帮助。
答案 4 :(得分:0)
要在这里扔东西。我遇到了与cakephp身份验证几乎无法解决的问题。结束了对它进行一些调试,发现在我的数据库准备期间,我创建了一个密码字段,完全能够存储正常大小的密码...但......当你开始应用密码哈希时,你需要更多。我的代码很好,但在我登录之前,我必须在VARCHAR字段中添加更多空间以获取密码。如果您遇到身份验证问题 - 请确保您的密码字段足够大且不会被截断我是。花了我一整天的时间来找到它。 DOH!
答案 5 :(得分:0)
如果我错了,请纠正我但是必须没有重定向代码或登录功能内的东西
function login() {
}
不应该像
那样public function login()
{
if ($this->request->is('post')) {
$user = $this->Auth->identify();
if ($user) {
$this->Auth->setUser($user);
return $this->redirect($this->Auth->redirectUrl());
}
$this->Flash->error(__('Invalid username or password, try again'));
}
}