Автоматически перенаправлять незарегистрированных пользователей на страницу входа

В настоящее время у меня есть проблема, что не авторизованные пользователи могут получить доступ к веб-сайту, если они вводят определенный URL.

Мой контроллер сайта выглядит так:

class SiteController extends Controller
{
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['logout'],
                'rules' => [
                    [
                        'actions' => ['logout', 'index'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                    [
                        'actions' => ['login'],
                        'allow' => true,
                        'roles' => ['?'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'logout' => ['post'],
                ],
            ],
        ];
    }
    [...]
}

Это не работает, пользователи могут получить доступ к веб-сайту.

Еще одно предостережение: страница входа - это другой URL https://login.mywebsite.com/ тогда как мой сайт http://anotherwebsite.com/

За actionIndex оно работает:

public function actionIndex()
    {
        if (!Yii::$app->user->isGuest) {
            return $this->render('index');
        }
        else {
            //$this->callback();
            $this->redirect('https://login.mywebsite.com');
        }
    }

Я хочу, чтобы это было по умолчанию, если вы не вошли в систему.

1 ответ

Попробуй удалить 'only' => ['logout'], от public function behaviors() или добавить 'index'

документы только о:

  • @var массив список идентификаторов действий, к которым должен применяться этот фильтр. Если это свойство не установлено,
    • тогда фильтр применяется ко всем действиям, если они не перечислены в [[кроме]].
Другие вопросы по тегам