2

私は今、何日も問題に夢中になっています。YouTube のドキュメントとビデオを使用しました。また、その特定の問題についてのみのチュートリアルもあります。しかし、私には見えない何かが間違っています。Cakephp を使用して Web システムにログイン システムを作成しました。私のユーザーの表は次のとおりです。

    CREATE TABLE `usuarios` (
    `Id` INT(50) UNSIGNED NOT NULL AUTO_INCREMENT,
    `grupo_id` INT(50) UNSIGNED NOT NULL,
    `Status` VARCHAR(30) NOT NULL COMMENT 'Coordenador/Bolsista/Super',
    `Nome` VARCHAR(50) NOT NULL,
    `Login` VARCHAR(50) NOT NULL,
    `Email` VARCHAR(50) NOT NULL,
    `Senha` VARCHAR(50) NOT NULL,
    `created` DATETIME NULL DEFAULT NULL,
    `modified` DATETIME NULL DEFAULT NULL,
    PRIMARY KEY (`Id`),
    UNIQUE INDEX `Login` (`Login`),
    UNIQUE INDEX `Nome` (`Nome`),
    INDEX `FK_usuarios_grupos` (`grupo_id`),
    CONSTRAINT `FK_usuarios_grupos` FOREIGN KEY (`grupo_id`) REFERENCES `grupos` (`Id`) ON UPDATE CASCADE
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=8;

Status は、システムのさまざまな部分の認証レベルです。3 つのオプションはコメントで説明されています。

In my AppController, after some time, I coded:

    class AppController extends Controller {
    public $components = array('Session',
                               'Auth'=>array(
                                          'authenticate' => array(
                            'Form' => array(
                                           'fields'=>array(
                                                           'username'=>'Login',
                                                           'password'=>'Senha'
                                                            ),
                                    'userModel'=> 'Usuario'
                            ),
                           ),
                           'loginAction' =>array(
                                                    'Controller' => 'Usuarios',
                                                    'action' => 'login'
                                           ),
                'loginRedirect'=>array('Controller'=>'Usuarios', 'action'=>'index'), 
                'logoutRedirect'=>array('Controller'=>'Usuarios', 'action'=>'index'), 
                'authError'=>"You can't access that page", 
                'authorize'=>'Controller', 
                'loginError'=> 'Login errado'

            )
    );

    public function isAuthorized($usuario=null) {
        //return parent::isAuthorized($usuario);
        return true;
    }

    public function beforeFilter() {
        $this->Auth->allow('index','view');
        $this->set('logged_in', $this->Auth->loggedIn());
        $this->set('current_user', $this->Auth->user());
    }
    }?>

isAuthorized メソッドには 2 つのオプションがあります。登録済み(ハッシュ化されたパスワード付き)か無効なものかは関係ありません。なぜこれが起こるのか分かりませんが、isAutorized メソッドの問題だと思います。

私の特定のコントローラーには、次の関連メソッドがあります。

public function login() {
        if ($this->request->is('post')) {
            if ($this->Auth->login()) {
                return $this->redirect($this->Auth->redirect());   
            } else {
                $this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth');
                $this->Session->setFlash('Username or password is incorrect');

            }
        }
    }

    public function logout() {
        $this->redirect($this->Auth->logout());
    }   
    public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('add_bolsista','logout');
    }

    public function isAuthorized($usuario = null) {
        if (($usuario['Status'] == 'Super') || ($usuario['Status'] == 'Coordenador') || ($usuario['Status'] == 'Bolsista')) {
            return true;
        }
        if (in_array($this->action, array('edit', 'delete'))) {
            if ($usuario['Id'] != $this->request->params['pass'][0]) {
                return false;
            }
        }
        return true;
    }

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

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

    // Default deny
    return false;
}

isAuthorized...none の 2 つのバージョンは、実際には機能していないようです。誰??

4

1 に答える 1

0

ログインシステムに auth コンポーネントのみを使用する場合は、 isAuthorized メソッドを定義する必要はありません。この方法を使わずに一度試してみてください。

特定のコントローラーの allow() メソッドで logout メソッドを指定する必要はありません。代わりに、このメソッドにパブリックにアクセスできるため、「ログイン」を定義する必要があります。それがあなたのために働くことを願っています。

于 2012-07-07T08:02:00.950 に答える