CakePHP 3.0 - 登录无效

时间:2016-05-16 07:38:21

标签: authentication cakephp login cakephp-3.0

我一直关注关于登录/身份验证部分的CakePHP 3.0教程(Bookmarker& Blog)并将其应用到我自己的代码中,但我似乎无法使其正常工作。

我甚至无法登录即可查看所有索引。登录系统不起作用;登录页面只是刷新。

编辑:好的,似乎我的测试用户是哑巴,我创建了一个新用户,它可以登录。但是,我仍然存在非用户能够查看表索引的问题(他们无法在除User之外的任何表中创建任何变量,这是特别允许的。)

EDIT2:我通过删除AppController中的beforeFilter函数来修复它。

用户控制器:

<?php
namespace App\Controller;

use App\Controller\AppController;
use Cake\Event\Event;

class UsersController extends AppController
{
    public function beforeFilter(Event $event)
    {
        parent::beforeFilter($event);
        $this->Auth->allow(['add', 'logout']);
    }   

    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(__('Incorrect username or password, please try again.'));
        }
    }

    public function logout()
    {   
        $this->Flash->success('You are now logged out.');
        return $this->redirect($this->Auth->logout());
    }

    public function index()
    {
        $this->set('users', $this->Users->find('all'));
    }

    public function view($id)
    {
        $user = $this->Users->get($id);
        $this->set(compact('user'));
    }
}

App Controller:

<?php

namespace App\Controller;

use Cake\Controller\Controller;
use Cake\Event\Event;

class AppController extends Controller
{
    public function initialize()
    {
        $this->loadComponent('Flash');
        $this->loadComponent('Auth', [
            'loginRedirect' => [
                'controller' => 'Users',
                'action' => 'index'
            ],
            'logoutRedirect' => [
                'controller' => 'Pages',
                'action' => 'display',
                'home'
            ]
        ]);
    }
}

用户表:

<?php
namespace App\Model\Table;

use Cake\ORM\Table;
use Cake\Validation\Validator;

class UsersTable extends Table
{

    public function validationDefault(Validator $validator)
        {
        $validator
            ->integer('id')
            ->allowEmpty('id', 'create');

        $validator
            ->requirePresence('username', 'create')
            ->notEmpty('username', 'A username is required');

        $validator
            ->requirePresence('password', 'create')
            ->notEmpty('password', 'A password is required');

        $validator
            ->email('email')
            ->requirePresence('email', 'create')
            ->notEmpty('email', 'An email is required');

        $validator
            ->requirePresence('role', 'create')
            ->notEmpty('role', 'inList', [
                'rule' => ['inList', ['admin', 'artist', 'engineer']],
                'message' => 'Please enter a valid role'
            ]);

        return $validator;
    }
}

2 个答案:

答案 0 :(得分:0)

我设法通过删除AppController中的beforeFilter函数来修复它。

答案 1 :(得分:0)

public function beforeSave(Event $ event)             {                 $ entity = $ event-&gt; data ['entity'];

            // Make a password for digest auth.
            $entity->digest_hash = DigestAuthenticate::password(
                $entity->username,
                $entity->password,
                env('SERVER_NAME')
            );
            return true;
        }