Как отключить аутентификацию для одного действия в контроллере? - PullRequest
3 голосов
/ 28 апреля 2019

Мне нужно, чтобы одно действие контроллера было общедоступным, чтобы пользователи могли запрашивать его без проверки подлинности.

public function behaviors() {

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

}

Я попробовал следующие варианты, но я все еще получаю Bad Request (#400) и перенаправлен на страницу входа.

Как мне решить эту проблему?

Ответы [ 2 ]

3 голосов
/ 28 апреля 2019

Возможно, вы пытаетесь отправить запрос 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,
     ],
    ],
   ],
  ];

}

Надеюсь, это поможет.

0 голосов
/ 28 апреля 2019

Вы можете сделать это, добавив следующую строку в массив доступа

       'except' => ['action'],

это тоже нравится,

            [
                'allow' => true,
                'actions' => ['login', 'signup'],
                'roles' => ['?'],
            ],
...