Authentication UnauthorizedDirect设置为false,仍在重定向

Authentication UnauthorizedDirect设置为false,仍在重定向,authentication,cakephp-3.0,Authentication,Cakephp 3.0,我正在为我的cake 3.0应用程序编写一些REST api,我需要将$this->Auth->unauthorizedRedirect设置为false,因为手册上说这将防止我的应用程序重定向到未经授权请求的登录url 问题是我试图在我的用户控制器中设置它,但它不起作用: class UsersController扩展了AppController{ 公共函数初始化(){ 父::初始化(); $this->loadComponent('RequestHandler'); } 公共函数before

我正在为我的cake 3.0应用程序编写一些REST api,我需要将
$this->Auth->unauthorizedRedirect
设置为
false
,因为手册上说这将防止我的应用程序重定向到未经授权请求的登录url

问题是我试图在我的用户控制器中设置它,但它不起作用:

class UsersController扩展了AppController{
公共函数初始化(){
父::初始化();
$this->loadComponent('RequestHandler');
}
公共函数beforeFilter(事件$Event){
父级::beforeFilter($event);
$this->Auth->allow(['logout']);
//使用RESTAPI时更改身份验证模式
如果(!$this->RequestHandler->accepts('html')){
$this->Auth->unauthorizedRedirect=false;
$user=$this->Auth->identify();
如果($user){
$this->Auth->setUser($user);
}
}
}
此脚本可以很好地检测用户是否实际注册,但当我尝试使用错误的身份验证数据时失败,显示登录表单而不是抛出错误。我做错了什么?

身份验证和授权是两件不同的事情 您混淆了身份验证和授权,这是两件不同的事情。登录用户是,测试是否允许登录用户访问特定操作是

因此,未经授权的重定向配置适用于访问操作时登录的用户

处理未经验证的请求 默认情况下,您正在寻找的(即对未经身份验证的请求抛出异常)是由基本身份验证适配器完成的,因此我假设您实际上没有使用此适配器

因此,如果您使用的是不同的适配器,最好在您试图识别用户的控制器中实现此行为

$user=$this->Auth->identify();
如果(!$user){
抛出新的禁止例外(“停止!锤击时间!”);
}否则{
$this->Auth->setUser($user);
}
或者,如果您希望为每个控制器引发异常,则在自定义身份验证适配器
unauthorized()
方法中,在执行可能的重定向之前,在未经身份验证的请求上调用该方法。引用文档:

当未经身份验证的用户尝试首先访问受保护的页面时,
unauthenticated()
调用链中最后一个身份验证程序的方法。身份验证对象可以通过返回响应对象来处理发送响应或重定向,以指示无需进一步操作。因此,在“身份验证配置”中指定身份验证提供程序的顺序很重要

如果验证器返回null,AuthComponent将用户重定向到登录操作。[…]

下面是一个扩展表单身份验证处理程序的简单示例:

src/Auth/MyCustomAuthenticate.php

namespace-App\Auth;
使用Cake\Auth\FormAuthenticate;
使用Cake\Network\Exception\ForbiddenException;
使用Cake\Network\Request;
使用Cake\Network\Response;
类MyCustomAuthenticate扩展为Authenticate
{
未经验证的公共功能(请求$Request,响应$Response)
{
如果(!$request->接受('text/html')){
抛出新的禁止例外('啊啊啊!你没有说神奇的单词!');
}
}
}
控制器

$this->loadComponent('Auth'[
“验证”=>[
“我的习惯”
]
]);
另见

身份验证和授权是两件不同的事情 您混淆了身份验证和授权,这是两件不同的事情。登录用户是,测试是否允许登录用户访问特定操作是

因此,未经授权的重定向配置适用于访问操作时登录的用户

处理未经验证的请求 默认情况下,您正在寻找的(即对未经身份验证的请求抛出异常)是由基本身份验证适配器完成的,因此我假设您实际上没有使用此适配器

因此,如果您使用的是不同的适配器,最好在您试图识别用户的控制器中实现此行为

$user=$this->Auth->identify();
如果(!$user){
抛出新的禁止例外(“停止!锤击时间!”);
}否则{
$this->Auth->setUser($user);
}
或者,如果您希望为每个控制器引发异常,则在自定义身份验证适配器
unauthorized()
方法中,在执行可能的重定向之前,在未经身份验证的请求上调用该方法。引用文档:

当未经身份验证的用户尝试首先访问受保护的页面时,
unauthenticated()
调用链中最后一个身份验证程序的方法。身份验证对象可以通过返回响应对象来处理发送响应或重定向,以指示无需进一步操作。因此,在“身份验证配置”中指定身份验证提供程序的顺序很重要

如果验证器返回null,AuthComponent将用户重定向到登录操作。[…]

下面是一个扩展表单身份验证处理程序的简单示例:

src/Auth/MyCustomAuthenticate.php

namespace-App\Auth;
使用Cake\Auth\FormAuthenticate;
使用Cake\Network\Exception\ForbiddenException;
使用Cake\Network\Request;
使用Cake\Network\Response;
类MyCustomAuthenticate扩展为Authenticate
{
未经验证的公共功能(请求$Request,响应$Response)
{
如果(!$request->接受('text/html')){
抛出新的禁止例外('啊啊啊!你没有说神奇的单词!');
}
}
}
控制器

$this->loadComponent('Auth'[
“验证”=>[
“我的习惯”
]
]);
<