2

CakePHP 2.0を使用してWebサイトを学習およびプログラミングしようとすると、奇妙な問題が発生します。私は過去にバージョン1.3で作業したことがありますが、これまでこの問題は発生していません。クックブック(p.638)のSimple Authentication and Authorization Applicationチュートリアルを実行していて、同じであることを確認するためにチェックとダブルチェックを行いました。

私が抱えている問題は、/ users / loginに電話して、偽の情報をフォームに入力するか、単に空のままにしておくことです。Authはログインし、ログインするとif($this->Auth->user())trueを受け取ります。

私はそれが起こっている理由を理解しようとするのをあきらめました。それはおかしい....

/ users / login

public function login(){
        if($this->request->is('post')){
            if($this->Auth->login($this->request->data)){
                $this->redirect($this->Auth->redirect());
            }else{
                $this->Session->setFlash('Wrong login credentials!', 'default', array('class' => 'notification error closeable')); 
            }
        }
}

//Appcontroller.php----認証構成

class AppController extends Controller {

public $components = array(
    'Session',
    'Auth' => array(
        'authenticate' => array(
            'Form' => array(
                'fields' => array('username' => 'email')
            )
        ),
        'logoutRedirect' => array('controller' => 'pages', 'action' => 'home'),
        'authorize' => array('Controller')
    )
);

 public function isAuthorized($user){
    if(isset($user['role']) && $user['role'] === 'admin'){
        return true;
    }
    return false;
}
4

2 に答える 2

3

わかりました。問題が何であるかを知っているようです。やってみてください:

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

CakeRequest オブジェクトを渡す代わりに。

その理由は:

2.0 では$this->Auth->login($this->request->data)、投稿されたデータを使用してユーザーをログインさせますが、1.3 では$this->Auth->login($this->data)最初にユーザーの識別を試み、成功した場合にのみログインします。おそらくそれが、データなしでログインできる理由です。

于 2013-01-03T03:54:04.840 に答える
1
public $components = array(
    'Session',
    'Auth' => array(
        'authenticate' => array(
            'Form' => array(
                'fields' => array('username' => 'email')
            )
        ),
        'loginAction' => array('admin' => false, 'controller' => 'users', 'action' => 'login')
        'logoutRedirect' => array('controller' => 'pages', 'action' => 'home'),
        'authorize' => array('Controller')
    )
);

またdebug($user);、AppController の isAuthorized メソッドの先頭に を挿入して、そこから false が返されないかどうかを確認してください。

于 2013-01-03T04:11:31.280 に答える