#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
методом withVerbFilter
? Если предполагается, что доступ к нему осуществляется по ссылке из почты, браузер отправит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']);
}