Отображение страницы после нажатия пользователем на ссылку вход в систему в приложении yii2 не требуется

#yii2 #yii2-advanced-app

#yii2 #yii2-advanced-app

Вопрос:

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

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

  public function behaviors() {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'actions' => ['deal'],
                        'allow' => true,
                        'roles' => ['?'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'deal' => ['post'],
                ],
            ],
        ];
    }
  

Комментарии:

1. Попробуйте добавить параметр only . Как это 'only' => ['deal'], в access поведении после class определения. Если вы хотите показывать эту страницу только пользователям, не прошедшим проверку подлинности.

2. Почему вы ограничиваете запросы на deal действие только POST методом with VerbFilter ? Если предполагается, что доступ к нему осуществляется по ссылке из почты, браузер отправит GET запрос.

Ответ №1:

Вы можете проверить авторизацию при действии

 public function actionDeal() {

    if (Yii::$app->user->isGuest amp;amp; !Yii::$app->session->has('adminshared')) {
        return $this->redirect(['site/login']);
    }

    // To do
}
  

и вы можете поделиться ссылкой на другое действие, когда пользователь вводит это действие, вы должны установить переменную для сеанса

 public function actionSharedFromAdmin() {

    // To Do

    Yii::$app->session->set('adminshared', true);
    return $this->redirect(['yourcontroller/deal']);

}