1

UserAuthComponent with modelを使用して正常にログインし、投稿やその他のコントローラーやモデルを管理するCakePHP2.0アプリがあります。これをサイトの「スーパー管理者」の部分と呼びます。

ただし、広告主のためにサイトの完全に別の部分を作成する必要があります。モデルAdvertiserとコントローラーを作成しましAdvertisersControllerた。テーブルも作成しましたadvertisers。広告主ユーザーを正常に追加できますが、ログインしようとすると、無効なユーザー名またはパスワードのエラーで失敗します。

私は認証のためのクックブックの提案に従いbeforeFilter、私のAdvertisersController:でこれらのオプションの両方を試しました。

$this->Auth->authenticate = array(
    AuthComponent::ALL => array(
        'userModel' => 'Advertiser', 
        'fields' => array('username' => 'username', 'password' => 'password'),
            'Form',
            'Basic'
    ));


$this->Auth->authenticate = array(
    'Form' => array('userModel' => 'Advertiser'),
    'Basic' => array('userModel' => 'Advertiser')
);

何か案は?AuthComponentを2つの異なるモデル/コントローラーで使用することはできませんか?

編集: AdvertisersControllerを次のように更新しました:

public function beforeFilter() {

    parent::beforeFilter();

    $this->Auth->authenticate = array(
        AuthComponent::ALL => array('userModel' => 'Advertiser'),
        'Form',
        'Basic'
    );
    $this->Auth->allow('add', 'logout'); // Letting advertisers register themselves

} 

現在、ログインは完全に失敗しています-失敗したパスワードエラーはありません。偽のユーザー名とパスワードも試しました。これが私のコントローラーのログイン方法です:

public function login() {
        if ($this->request->is('post')) {
            if ($this->Auth->login()) {
                $this->redirect(array('controller' => 'advertisers', 'action' => 'admin'));
            } else {
                $this->Session->setFlash(__('Invalid username or password, try again'));
            }
        }
    }

最初のifの終了後にステートメントを追加しelse print_r($this->data); exit;、空の配列を取得しました。ログインページにもアクセスできませんでした。

また、フォームの出力は次のとおりです。POSTがメソッドです。

<form action="/advertisers/login?url=advertisers%2Flogin" id="AdvertiserLoginForm" method="post" accept-charset="utf-8">
    <div style="display:none;"><input type="hidden" name="_method" value="POST"/></div>    
    <fieldset>
        <legend>Please enter your username and password</legend>
        <div class="input text required">
            <label for="AdvertiserUsername">Username</label>
            <input name="data[Advertiser][username]" maxlength="50" type="text" id="AdvertiserUsername"/>
        </div>
        <div class="input password required">
            <label for="AdvertiserPassword">Password</label>
            <input name="data[Advertiser][password]" type="password" id="AdvertiserPassword"/>
        </div>    
    </fieldset>
    <div class="submit">
        <input  type="submit" value="Login"/>
    </div>
</form>
4

1 に答える 1

0

この質問を詳細情報とともに再投稿しました。Joshuaは、このシナリオで管理者プレフィックスを整理するのに大いに役立ちました。アプリにとって「多すぎる」と思われる場合は、こちらのコメントをご覧ください。それはそれよりも複雑に見え、ユーザーコントロールをより明確に保つのに役立ちます。

于 2012-11-12T19:36:33.520 に答える