我有一个 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>