未调用 CakePHP 身份验证中间件
CakePHP Authentication Middleware not called
我经常使用 AuthComponent 但对 AuthenticationMiddleware 还是陌生的。我几乎完全遵循 https://book.cakephp.org/authentication/2/en/index.html 除了用户名字段是用户名而不是电子邮件。但是当我尝试获取需要身份验证的页面时,Cake 在 AuthenticationComponent::doIdentityCheck() 中抛出 UnauthenticatedException。这可以理解,因为 Cake 应该将我重定向到 /users/login,但它没有。我试过了
$service->loadAuthenticator('Authentication.Form', [
'loginUrl' => '/users/login' // case 1
// or case 2 'loginUrl' => \Cake\Routing\Router::url('/users/login'),
// or case 3 omit this to use the default
在上述所有情况下,Cakes 都会抛出 UnauthenticatedException 消息:
未找到身份。您可以通过将 requireIdentity 配置为 false 来跳过此检查。
另外 http://localhost:8765/users/login leads me to the correct page, also I can see the list of users by http://localhost:8765/users/ 如果我允许这样未经验证:
// UsersController.php
public function initialize() : void {
parent::initialize();
$this->Authentication->allowUnauthenticated(['index', 'login']);
}
我的环境:CakePHP 4.0,认证插件2.0。有没有办法验证 AuthenticationMiddleware 确实已经设置并添加到中间件队列?
如果中间件没有 运行,你会得到一个不同的错误,一个会抱怨请求对象缺少 authentication
属性的错误。
您需要在服务对象上配置 unauthenticatedRedirect
选项,以便为未经身份验证的请求发出重定向,如果没有配置该选项,您将收到异常。此外,如果您希望能够在成功登录后重定向用户,您可能需要设置 queryParam
选项(这是将保存最初访问的 URL 的查询字符串参数)。
$service->setConfig([
'unauthenticatedRedirect' => '/users/login',
'queryParam' => 'redirect',
]);
文档中似乎缺少它,只有 mentioned in the migration notes. You may want to open an issue for that over at GitHub。 快速入门指南示例已更新为包含重定向配置。
我经常使用 AuthComponent 但对 AuthenticationMiddleware 还是陌生的。我几乎完全遵循 https://book.cakephp.org/authentication/2/en/index.html 除了用户名字段是用户名而不是电子邮件。但是当我尝试获取需要身份验证的页面时,Cake 在 AuthenticationComponent::doIdentityCheck() 中抛出 UnauthenticatedException。这可以理解,因为 Cake 应该将我重定向到 /users/login,但它没有。我试过了
$service->loadAuthenticator('Authentication.Form', [
'loginUrl' => '/users/login' // case 1
// or case 2 'loginUrl' => \Cake\Routing\Router::url('/users/login'),
// or case 3 omit this to use the default
在上述所有情况下,Cakes 都会抛出 UnauthenticatedException 消息:
未找到身份。您可以通过将 requireIdentity 配置为 false 来跳过此检查。
另外 http://localhost:8765/users/login leads me to the correct page, also I can see the list of users by http://localhost:8765/users/ 如果我允许这样未经验证:
// UsersController.php
public function initialize() : void {
parent::initialize();
$this->Authentication->allowUnauthenticated(['index', 'login']);
}
我的环境:CakePHP 4.0,认证插件2.0。有没有办法验证 AuthenticationMiddleware 确实已经设置并添加到中间件队列?
如果中间件没有 运行,你会得到一个不同的错误,一个会抱怨请求对象缺少 authentication
属性的错误。
您需要在服务对象上配置 unauthenticatedRedirect
选项,以便为未经身份验证的请求发出重定向,如果没有配置该选项,您将收到异常。此外,如果您希望能够在成功登录后重定向用户,您可能需要设置 queryParam
选项(这是将保存最初访问的 URL 的查询字符串参数)。
$service->setConfig([
'unauthenticatedRedirect' => '/users/login',
'queryParam' => 'redirect',
]);
文档中似乎缺少它,只有 mentioned in the migration notes. You may want to open an issue for that over at GitHub。 快速入门指南示例已更新为包含重定向配置。