0

ログインフォームに問題があります $this->Auth->login() は常に false を返します。ユーザー アカウントに別のテーブル名を使用しています。以下は私のコードです

HgAdminscontroller.php

    <?php
    // app/Controller/UsersController.php
    class HgAdminsController extends AppController 
{
    public function beforeFilter() 
    {
        parent::beforeFilter();
        //$this->Auth->allow('add', 'logout');
    }
    public function index() {
        $this->HgAdmin->recursive = 0;
        $this->set('users', $this->paginate());
    }
    /*
public function add() {
if ($this->request->is('post')) {
$this->HgAdmin->create();
if ($this->HgAdmin->save($this->request->data)) {
$this->Session->setFlash(__('The user has been saved'));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The user could not be saved. Please, try again.'));
}
}
}*/
    public function login() {

    if ($this->request->is('post')) {
    echo AuthComponent::password($this->data['password']);
    debug($this->data);
        if ($this->Auth->login()) {
        $this->redirect($this->Auth->redirect());
        } else {
        $this->Session->setFlash(__('Invalid username or password, try again'));
        }
    }
    }
    public function logout() {
        $this->redirect($this->Auth->logout());
    }
}
?>

appController.php
App::uses('Controller', 'Controller');

/**
 * Application Controller
 *
 * Add your application-wide methods in the class below, your controllers
 * will inherit them.
 *
 * @package       app.Controller
 * @link http://book.cakephp.org/2.0/en/controllers.html#the-app-controller
 */
    class AppController extends Controller {
    public $components = array(
        'Session',
        'Auth' => array(
        'loginRedirect' => array('controller' => 'posts', 'action' => 'index'),
        'logoutRedirect' => array('controller' => 'pages', 'action' => 'display', 'home')
        )
    );
    public function beforeFilter() {
        $this->Auth->allow('index', 'view');
//      Security::setHash('md5');
        $this->Auth->userModel = 'hg_admins';
        $this->Auth->loginAction = array( 'controller' => 'HgAdmins', 'action' => 'login' );
    }
//...
}

HgAdmin.php //model
<?php 
class HgAdmin extends AppModel {
    var $name= "hg_admin";
    public $validate = array(
        'username' => array(
        'required' => array(
        'rule' => array('notEmpty'),
        'message' => 'A username is required'
        )
    ),
        'password' => array(
        'required' => array(
        'rule' => array('notEmpty'),
        'message' => 'A password is required'
        )
    )
    );

?>

Login view

<h2>Login Here</h2>
<?php echo $this->Session->flash('auth'); 
echo $this->form->create('HgAdmin');
echo $this->Form->input("username");
echo $this->Form->input("password");
echo $this->form->end(__("Login"));
?>

データベースのパスワード値が AuthComponent::password($this->data['password']); からの値と同じであることを確認しました。なぜそれがフィアリングなのかわかりません。Cakephp の add 関数を使用してユーザーを追加すると、ユーザーは同じパスワードで追加されますが、それでログインできません。

4

2 に答える 2

0

@huzefamの答えは正しいですが、Bcrypt認証を使用する場合に備えて追加したいだけです。ここでは Accounts テーブルを使用します。このようなものを追加する必要があります。この助けを願っています

public $components = array(
        'Auth' => array(
            'loginAction' => array(
                'controller' => 'accounts',
                'action' => 'admin_login'

            ),
            'loginRedirect' => array(
                'controller' => 'orders',
                'action' => 'admin_index'
            ),
            'logoutRedirect' =>array (
                'controller' => 'accounts',
                'action' => 'admin_login'
            ),
            'authError' => 'You have to login to access this page!',
            'authenticate' => array(
                'Blowfish' => array(
                    'userModel' =>'Account',
                    'fields' => array('password' => 'password')
                )
            ),
            'authorize' => array('Controller')
        ),
        'RequestHandler',
        'Paginator',
        'Session'
    );
于 2016-01-27T03:50:43.127 に答える