我需要一个控制器动作才能公开使用,以便用户可以在不经过身份验证的情况下请求它。
public function behaviors() {
return [
'access' => [
'class' => AccessControl::className(),
'only' => [ 'callback' ],
'rules' => [
[
'allow' => true,
'actions' => [ 'callback' ],
],
],
],
];
}
我尝试了以下选项,但仍然收到Bad Request (#400)
并重定向到登录页面。
如何解决此问题?
答案 0 :(得分:3)
我可能猜到您正在尝试发送POST请求。
默认情况下, Yii2 要求对所有帖子请求进行CSRF验证,您可能会得到类似的行为。
尝试使用以下代码将其禁用:
private $noAuthRoutes = ['callback'];
public function beforeAction($action)
{
if(in_array($action->id,$this->noAuthRoutes)) {
$this->enableCsrfValidation = false;
}
return parent::beforeAction($action);
}
public function behaviors() {
return [
'access' => [
'class' => AccessControl::className(),
'only' => $this->noAuthRoutes,
'rules' => [
[
'allow' => true,
'actions' => $this->noAuthRoutes,
],
],
],
];
}
希望这会有所帮助。
答案 1 :(得分:0)
您可以通过将以下行添加到访问数组来实现
'except' => ['action'],
也喜欢这个
[
'allow' => true,
'actions' => ['login', 'signup'],
'roles' => ['?'],
],