0

認証コンポーネントに問題があります。ユーザーでログインしようとするたびに (ユーザーが正しいパラメーターでデータベースに存在することを確認しました)、アプリケーションからログイン失敗メッセージがスローされます。

Accounts と Employees の 2 つのモデルがあり、1 つの Employee は AccountsTo Account に属し、1 つの Account は One Employee を持っています。saveAssociated() でデータを保存すると、データベースはすべて問題ありませんが、ログインできません。

私は解決策を探していて、クックブックのチュートリアルを何度も繰り返していますが、間違っていることを見つけることができません。

ここにいくつかのコードがあります:

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

誰かが私が間違っていることを教えてください。他のコード セクションが必要な場合は、教えてください。

ありがとう!

4

1 に答える 1

0

ControllerAuthorize を使用する場合、ブール値を返すメソッドを AppController'authorize' => array('Controller')に実装する必要があります。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;
}

ドキュメントの認証セクションで詳細を確認し、「Using ControllerAuthorize」を検索してください。

于 2013-11-04T16:27:06.750 に答える