Как уже упоминалось в комментариях, совместное использование средства проверки подлинности формы и HTTP-основы c не будет работать должным образом, это связано с тем, что служба проверки подлинности не прекратит выполнение всех загруженных средств проверки подлинности, кроме одного. из них возвращает ответ, который указывает на успешную аутентификацию.
Это означает, что вы всегда будете представлены с ответом на запрос аутентификации и никогда не увидите свою форму входа. Только фактическая часть аутентификации будет работать в этом созвездии, ie напрямую отправляя ваши учетные данные для входа в качестве данных формы в конечную точку входа в систему.
Если вам на самом деле не нужен базовый c ответ на запрос проверки подлинности, который не позволяя вам получить доступ к форме входа в систему, вы можете использовать специальный / расширенный аутентификатор, который не вызывает ответ на запрос, который должен быть таким же простым, как переопределение \Authentication\Authenticator\HttpBasicAuthenticator::unauthorizedChallenge()
:
src /Authenticator/ChallengelessHttpBasicAuthenticator.php
namespace App\Authenticator;
use Authentication\Authenticator\HttpBasicAuthenticator;
use Psr\Http\Message\ServerRequestInterface;
class ChallengelessHttpBasicAuthenticator extends HttpBasicAuthenticator
{
public function unauthorizedChallenge(ServerRequestInterface $request)
{
// noop
}
}
$service->loadAuthenticator(\App\Authenticator\ChallengelessHttpBasicAuthenticator::class);
Также не обязательно добавлять дополнительные проверки в случае, если ваше приложение использует метод setIdentity()
компонента аутентификации, который может вызвать идентичность, которая будет сохраняться в сеансе, даже при использовании аутентификаторов без сохранения состояния. Если вы не хотите этого, то вам нужно проверить, является ли успешный аутентификатор без сохранения состояния, прежде чем устанавливать идентификацию:
$provider = $this->Authentication->getAuthenticationService()->getAuthenticationProvider();
if (!($provider instanceof \Authentication\Authenticator\StatelessInterface))
{
$this->Authentication->setIdentity(/* ... */);
}