CakePHP中的身份验证组件不起作用

时间:2013-11-03 20:08:56

标签: cakephp authentication

我在使用身份验证组件时遇到了一些问题。每次我尝试使用用户登录时(我已经检查过该用户是否存在正确的params数据库),我的应用程序会向我发送失败的登录消息。

我有两个模型,帐户和员工,其中一个员工属于帐户,一个帐户有一个员工。我使用saveAssociated()保存数据,数据库中一切正常,但无法登录。

我一直在寻找解决方案,并一次又一次地重复CookBook教程,我找不到我做错了什么。

以下是一些代码:

class AppController extends Controller {
public $components = array(
    'DebugKit.Toolbar',
    'Session',
    'Auth' => array(
        'loginAction' => array('controller' => 'accounts', 'action' => 'login'),
        'loginRedirect' => array('controller' => 'snippets', 'action' => 'index'),
        'logoutRedirect' => array('controller' => 'snippets', 'action' => 'index'),
        'authorize' => array('Controller')));

public function beforeFilter() {
    $this->Auth->loginAction = array('controller' => 'accounts', 'action' => 'login');
    $this->Auth->authenticate = array(
        AuthComponent::ALL => array(
            'userModel' => 'Account',
            'fields' => array('username' => 'username', 'password' => 'password')),
        'Basic',
        'Form');
    $this->Auth->allow('index', 'view');

我的登录功能:

public function login() {
    if($this->request->is('post')) {
        if ($this->Auth->login()) {
            $this->Session->setFlash(__('Welcome'));
            return $this->redirect(array('controller' => 'snippets', 'action' => 'index'));
            //return $this->redirect($this->Auth->redirect());
        }
        $this->Session->setFlash(__('Wrong password or email'), 'default', array(), 'auth');
    }
}

拜托,有人可以告诉我,我做错了什么?如果您需要查看其他一些代码部分,请告诉我。

谢谢!

1 个答案:

答案 0 :(得分:0)

使用ControllerAuthorize 'authorize' => array('Controller')时,您需要实现一个在AppController中返回布尔值的isAuthorized()方法。

 public function isAuthorized($user = null) {
    // Any registered user can access public functions
    if (empty($this->request->params['admin'])) {
        return true;
    }

    // Only admins can access admin functions
    if (isset($this->request->params['admin'])) {
        return (bool)($user['role'] === 'admin');
    }

    // Default deny
    return false;
}

您可以查看the Auth Section of the docs文档了解详情,搜索“使用ControllerAuthorize”