2013-05-07 3 views
1

Есть ли способ связать сообщение об ошибке аутентификации с условием области действия компонента auth?Cakephp auth: сообщения об ошибках привязки к состоянию области

Например у меня есть:

'Auth' => array('authenticate' => array('Blowfish' => array('scope' => array('User.activated' => 1)))); 

Я хотел бы установить ошибку, если условие сфера выходит из строя. Мне нужно уметь отличать это от ошибки, которая отображается, если пользователь/пропуск неверен.

Возможно ли это?

+0

Вы пытались выяснить, что происходит, когда вы вручную регистрируете пользователей при использовании '$ this-> Auth-> login ($ this-> request-> data ['User']);'. Там может быть объект возврата или исключение, которое вы можете перехватить перед визуализацией представления. –

+0

К сожалению, этот метод возвращает булевский язык. – BIOS

ответ

4

Правильно, у меня есть корень в исходном коде CakePHP, и я пришел к выводу, что он не делает ничего необычного при использовании облачных условий, он просто добавляет их в качестве дополнительных условий запроса. Он либо найдет пользователя, который совпадает с комбинацией имени пользователя и пароля, и с любыми условиями области видимости, или нет.

Одним из возможных решений было бы вручную войти пользователь и проверить на активированном поле следующим образом:

public function login() 
{ 
    if ($this->request->is('post')) { 
     if ($this->Auth->login($this->data['User'])) { 
      // check activated field 
      if ($this->Auth->user('activated') == 1) { 
       // user is activated 
       $this->redirect(...); 
      } else { 
       // user is not activated 
       // log the user out 
       $this->Auth->logout(); 
       // redirect to an error page for inactive users 
       $this->redirect(..); 
      } 
     } 
     // redirect to an error page for wrong username/password 
     $this->redirect(..); 
    } 
} 

я должен уточнить, что вы не должны определять условия области действий при настройке компоненты проверки подлинности.

Надеюсь, это поможет!

+0

Вот что я подумал, когда посмотрел на источник. Не был уверен, был ли какой-то другой способ сделать это. Это было бы достойным дополнением к пирогу, который я думаю, чтобы позволить такую ​​привязку. Спасибо за ответ :) – BIOS

+0

Ваш приветственный @BIOS. Я определенно поддерживаю ваш случай использования здесь, потому что я чувствую, что вы теряете информацию об аутентификации, которая может повлиять на реакцию вашего приложения. Трудность с внедрением такой функции заключается в поддержке обратной совместимости и всей _convention над конфигурацией, которая имеет CakePHP. Если вы чувствуете, что у вас достаточно сильное дело, я рекомендую вам размещать на своем [вопроснике] (https://cakephp.lighthouseapp.com/dashboard) или реализовать его самостоятельно и сделать запрос на перенос на своем [репо] (https: //github.com/cakephp/cakephp/pulls) –

+0

Я думаю, что если вам нужно избегать использования «условий» в допустимом прецеденте, то функциональность явно нарушена. Было бы лучше, если бы метод login возвращал объект, содержащий все ошибки auth, а не просто false. Разумеется, обратная совместимость будет проблемой. Будут рассматривать билет. Еще раз спасибо. – BIOS

Смежные вопросы