我正在开发cakephp的网站。 我想使用用户名或emailid提供登录设施。
我正在使用。 $ this-> Auth-> fields ['email'] ='username';
登录失败时再次尝试重新登录。 但直到现在我还没有成功。
任何人都可以向我推荐任何其他想法或我缺少的东西。 我也打算使用autorediret。
答案 0 :(得分:3)
由于您可以在AuthComponent
回调中设置beforeFilter
,我认为您还应该可以在那里进行切换:
function beforeFilter() {
if (
isset($this->data['User']['login']) && // login form has been posted
Validation::email($this->data['User']['login']) // value looks like an email
) {
$this->Auth->fields = array('username' => 'email'); // change the db field
}
}
如果这不起作用,您可能需要尝试使用早期过滤器,例如beforeRender
,因为您需要在AuthComponent::startup()
之前触发代码。作为最后的手段,您可以extend the AuthComponent:
App::import('Component', 'AuthComponent');
class AppAuthComponent extends AuthComponent {
function startup() {
# your code here
parent::startup();
}
}