Глобальный фильтр / поведение Yii2 для принудительной аутентификации пользователя

В моем приложении Yii2 я пытаюсь заставить всех пользователей проходить аутентификацию. Если они еще не аутентифицированы, они должны быть перенаправлены на страницу входа.

В Yii1 я сделал это, создав класс, который будет проверять, вошел ли пользователь в систему, и подключил этот класс к onBeginRequest поведение в моем основном конфигурационном файле.

// Yii 1
'behaviors' => array(
'onBeginRequest' => array(
'class' => 'application.components.RequireLogin',
)
),

Как я могу получить такое же поведение в Yii2? Я знаю, что могу использовать поведение, чтобы сделать это, но я не хочу добавлять это поведение в мой основной файл конфигурации, поэтому все запросы сначала проверяются на аутентификацию.

Метод рабочего поведения выглядит так:

// Yii2
public function behaviors() {
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'actions' => ['login', 'error'],
'allow' => true,
],
[
'allow' => true,
'roles' => ['@'],
],
],
],
];
}

24

Решение

Итак, я должен был добавить следующий код ниже 'components' => [...]

 'as beforeRequest' => [
'class' => 'yii\filters\AccessControl',
'rules' => [
[
'actions' => ['login', 'error'],
'allow' => true,
],
[

'allow' => true,
'roles' => ['@'],
],
],
],

Узнайте больше о формате: http://www.yiiframework.com/doc-2.0/guide-concept-configurations.html#configuration-format

28

Другие решения

На самом деле я не разбираюсь в Yii2 (но очень сильно в Yii1).

Одно из решений, которое может быть использовано в Yii1, и я полагаю, также в Yii2, имеет метод фильтра в главном классе Controller. Обычно один контроллер служит главным контроллером. Если у вас его нет, создайте его, и каждый должен расширить его. Вы можете реализовать это, вероятно, не как фильтр, а в других методах этого «главного контроллера» (init ()?)
Если вся активность проходит через класс контроллера, то все готово.

-1

По вопросам рекламы [email protected]