【发布时间】:2020-07-14 00:22:05
【问题描述】:
我正在 Yii2 中构建一个 API,并添加了 CORS 和身份验证。这适用于所有创建/读取/更新/删除操作,但不适用于自定义操作。有没有人经历过这种情况?
网址管理器:
['class' => 'yii\rest\UrlRule', 'controller' => 'api/v1/user', 'pluralize' => false],
控制器行为:
public function behaviors()
{
return ArrayHelper::merge([
'corsFilter' => [
'class' => Cors::className(),
],
[
'class' => HttpBearerAuth::className(),
'except' => ['options',
'login',
],
],
], parent::behaviors()
);
}
如前所述,CRUD 的操作很好,但自定义操作(例如 http://domain.com/user/test)将响应 401 Unauthorised 响应。
难道不能让 CORS 和 auth 在自定义操作上协同工作吗?
编辑:我应该补充一点,问题 (401) 仅在浏览器发出 OPTIONS 请求时发生。正常请求(curl、Postman)不受影响。 RESTful、Cors、Auth 组合似乎会出现此问题。
【问题讨论】:
-
浏览器控制台中的完整错误消息是什么?
-
还有你在扩展什么控制器
\yii\rest\ActiveController或\yii\rest\Controller?您是否覆盖或更改了内置options操作的工作方式? -
@salem,我正在扩展 ActiveController。
-
@Salem,浏览器控制台显示:
XMLHttpRequest cannot load http://poly.api/api/v1/user/me. Invalid HTTP status code 401