1

私はCakePHP2.2を使用しています、これが私が使用したチュートリアルへのリンクです:link

非常に重要:Inflectorをオフにしました

ACLは気にしません(動作します:D)、AUTHが動作しません... $this->Auth->login()falseを返します...

ユーザーコントローラー:

App::uses('AppController', 'Controller');

class UsersController extends AppController {
    public $helpers = array('Html','Form');
    public $components = array('Auth' => array('authenticate' => array('form' => array('fields' => array('username' => 'login')))),'Session');

    function beforeFilter() {

        //$this->Auth->allow('logout', 'view');
        $this->Auth->allow('*');
        parent::beforeFilter(); 

    }
    function login() {
        if ($this->Auth->login())
        {
            $this->redirect($this->Auth->redirect());
        } else
        {
            $this->Session->setFlash(__('Invalid username or password, try again'));
        }

アプリコントローラー:

App::uses('Alc', 'Controller', 'Controller');
class AppController extends Controller {

    public $components = array('Auth'=>array('authorize' => array('Actions' => array('actionPath' => 'controllers'))), 'Session');

    public $helpers = array('Html', 'Form', 'Session');

    function beforeFilter() {
    $this->Auth->userModel = 'Users';
        $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
        $this->Auth->allow('index', 'view', 'admin', 'edit', 'login', 'logout', 'add');
        $this->Auth->logoutRedirect = array('controller' => 'novosti', 'action' => 'index');
        $this->Auth->loginRedirect = array('controller' => 'novosti', 'action' => 'index');
    }

ユーザーモデル:

App::uses('AuthComponent', 'Controller/Component');
class Users extends AppModel {
        public function beforeSave($options = array()) {
            if (isset($this->data[$this->alias]['password'])) {
                $this->data['Users']['password'] = AuthComponent::password($this->data['Users']['password']);
            }
            return true;
        }
        public function bindNode($user) {
            return array('model' => 'Groups', 'foreign_key' => $user['Users']['groups_id']);
        }

ファイルを閲覧する:

<?php
echo $this->Session->flash('auth');
echo $this->Form->create('Users', array('action' => 'login'));
echo $this->Form->inputs(array(
    'legend' => __('Login', true),
    'Login',
    'password'
));
echo $this->Form->end('Login');
?>

利用可能なSQLダンプがありません

私は行ったり来たりlib/controller/components/Authcomponents.phplib/controller/components/auth/*て、それらすべてのファイルを調べました....そしてすべてAuth.UserAuth.Users;に変更しました。また、変数の設定を調べたところ、モデル名をからに変更UserUsers、ログインフィールドの場合もからusernameに変更しました。Login

4

2 に答える 2

2

if (debug($this->Auth->login()))

デバッグは何も返さないため、この行は常に失敗します。

usename isフィールドはですLoginが、デフォルトはusernameであり、これに対してAuthを構成していません。

public $components = [
    'Auth' => [
        'authenticate' => [
            'Form' => [
                'userModel' => 'Users',
                'fields' => [
                    'username' => 'Login'
                ],
            ],
        ],
    ],
];

beforeSaveUsersでは、ではなくキーを使用していますUser。モデルは特異です。

<?php echo $this->element('sql_dump'); ?>生成されたクエリを追加して確認します。それが正しく、パスワードがデータベース値と一致していることを確認してください。

私が気づいたいくつかのもの。

于 2012-09-10T07:46:19.823 に答える
0

ログインビューでこれを試してください:

<?php
echo $this->Session->flash('auth');
echo $this->Form->create('Users', array('action' => 'login')); 
echo $this->Form->inputs(array(
    'legend' => __('Login', true),
    'username',
    'password'
));
echo $this->Form->end('Login');
?>

ログインを使用する場合、Authはデフォルトの承認ファイルをユーザー名/パスワードとして受け入れ、コントローラーで次のように認証承認をオーバーライドします。

$this->Auth->fields = array('username' => 'login', 'password' => 'password');

またはコントローラーでこれを行うことができます:

$this->Auth->authenticate = array(
'Form' => array(
'fields' => array('username' => 'login', 'password' =>'password')
    )
        );
if($this->Auth->login($this->request->data['Users'])){
        ......your code...
    }
于 2012-09-10T08:30:25.387 に答える