php - 如何在 Controller 中为单个操作禁用auth?

标签 php controller yii2

我需要一个控制器的一个公开可用的动作,这样用户就可以在不经过认证的情况下请求它。

public function behaviors() {

    return [
        'access' => [
            'class' => AccessControl::className(),
            'only'  => [ 'callback' ],
            'rules' => [
                [
                    'allow'   => true,
                    'actions' => [ 'callback' ],
                ],
            ],
        ],
    ];

}

我尝试了以下选项,但仍然收到Bad Request (#400)并重定向到登录页。
我该如何解决这个问题?

最佳答案

我猜你是想发一个邮件请求。
只要yii2默认要求对所有post请求进行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,
     ],
    ],
   ],
  ];

}

希望这有帮助。

关于php - 如何在 Controller 中为单个操作禁用auth?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55891257/

相关文章:

php - 如何在 Yii2 中仅显示 ActiveField 的标签和错误

php - 如何同时执行多个 Guzzle 请求?

php - 数据库的URL输出

ios - View Controller 不符合 SKPaymentTransactionObserver、SKProductsRequestDelegate 的协议(protocol)

Yii2 迁移 - 在另一列之后添加列

yii - Yii2 中的 findAllByPk 模拟

php - 使用教义和 PHP 进行库存管理

php - foreach中直接修改数组元素导致value覆盖下一个元素

javascript - Angular Controller $scope.fId 显示未定义的值

api - beego 更新 & 通过 ID 获取 1