Я в настоящее время добавляю компонент аутентификации Cake PHP 3 к существующему приложению Cake PHP, следуя документации, перечисленной здесь:
https://book.cakephp.org/3/en/controllers/components/authentication.html
В настоящее время я работаю с отображением сообщений об ошибках, следуя этому примеру:
https://book.cakephp.org/3/en/controllers/components/authentication.html#identifying -пользователи-и-вход-их-в
public function login()
{
if ($this->request->is('post')) {
$user = $this->Auth->identify();
if ($user) {
$this->Auth->setUser($user);
return $this->redirect($this->Auth->redirectUrl());
} else {
$this->Flash->error(__('Username or password is incorrect'));
}
}
}
Я интеграция компонентов аутентификации, следуя приведенной здесь документации, где массив пользовательских данных возвращается, если пользователь может пройти аутентификацию, и ложь, если они не (как указано в документации):
https://book.cakephp.org/3/en/controllers/components/authentication.html#creating -custom-authentication-objects
namespace App\Auth;
use Cake\Auth\BaseAuthenticate;
use Cake\Http\ServerRequest;
use Cake\Http\Response;
class OpenidAuthenticate extends BaseAuthenticate
{
public function authenticate(ServerRequest $request, Response $response)
{
// Do things for OpenID here.
// Return an array of user if they could authenticate the user,
// return false if not.
if($failureCondition) {
return false;
}
return $user;
}
}
Однако я хотел бы динамически определить ошибку в компоненте auth:
namespace App\Auth;
use Cake\Auth\BaseAuthenticate;
use Cake\Http\ServerRequest;
use Cake\Http\Response;
class OpenidAuthenticate extends BaseAuthenticate
{
public function authenticate(ServerRequest $request, Response $response)
{
if($failureConditionA) {
$this->error = 'Error A';
return false;
}
if($failureConditionB) {
$this->error = 'Error B';
return false;
}
return $user;
}
}
И распечатать динамически создаваемую ошибку в fla sh сообщение примерно так:
public function login()
{
if ($this->request->is('post')) {
$user = $this->Auth->identify();
if ($user) {
$this->Auth->setUser($user);
return $this->redirect($this->Auth->redirectUrl());
} else {
// 'Error A' or 'Error B' displayed on failure
$this->Flash->error($this->Auth->error());
}
}
}
Какой правильный код использовать для этого?
Если это нарушает намерение, как должен функционировать AuthComponent, я бы быть заинтересованным иметь этот опыт выспались и / или знаете какие-нибудь другие правильные способы сделать это?
Заранее спасибо!