cakePHP auth组件无法正常工作

时间:2010-10-24 23:38:54

标签: cakephp authentication

我遇到了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>

任何帮助都会非常感激,这让我撕裂了我的头发!

6 个答案:

答案 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'));
    }
}