1

我有一个 CakePHP 2.0 应用程序,它使用带有模型的 AuthComponentUser成功登录以管理帖子和其他控制器和模型。我将其称为网站的“超级管理员”部分。

但是,我需要为广告商创建一个完全独立的网站部分。我已经创建了模型Advertiser和控制器AdvertisersController。我还创建了 table advertisers。我能够成功添加广告客户用户,但是当我尝试登录时,由于用户名或密码无效错误而失败。

我遵循了 Cookbook for AuthenticationbeforeFilter中的建议,并在我的以下选项中尝试了这两个选项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 与两个不同的模型/控制器一起使用吗?

编辑:我将我的 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'));
            }
        }
    }

else print_r($this->data); exit;在第一个 if 结束后添加了一条语句,得到了一个空数组。甚至无法进入登录页面。

此外,表单的输出是这样的—— 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 回答