На странице публикуемого поста размещается динамический баннер (баннер берется из базы данных). Под авторизованным пользователем загружается нормально, но если захожу по URL без авторизации, то почему-то перенаправляет на сайт/логин. Если я удалю код баннера со страницы, то контент поста загружается нормально для любого пользователя, независимо от того, авторизован он или нет. Проблема возникает как в продакшене, так и на локальной машине.
URL страницы:
http://site.local/ru/topic/view?title=anons
Контроллер:
class TopicController extends Controller {
public $layout = 'main';
public $defaultAction = 'index';
public function behaviors() {
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
['allow' => true, 'actions' => ["create", "update", 'admin'], 'roles' => ['@']],
['allow' => true, 'actions' => ["index", "view"], 'roles' => ['?', '@']]
]
]];
}
/**
* Displays a particular model.
* @param string $title the title of the model to be displayed
*/
public function actionView($title) {
$model = Topic::findOne(["code"=>$title]);
if (empty($model))
return $this->redirect(['/404']);
if (!$model->published && (Yii::$app->user->isGuest))
return $this->redirect(['/404']);
if ($model->paid > 0)
Yii::$app->params["nofollow"] = 1;
return $this->render('view', array(
'model'=>$model
));
}
Просмотр:
Просмотр баннера/просмотра:
id?>" data-bid="">
[url=" title="" target='_blank' rel="nofollow">
[img]" alt="" loading="lazy">
[/url]
Если я закомментирую строку
$banner = Banner::getRandom($type);
Тогда все работает как надо - страница загружается и не требует авторизации.
Поиск по баннеру:
public static function getRandom($type = "main_banner") {
$lang = Yii::$app->language;
$country = self::getCountry();
$now = date("Y-m-d");
$tbl = self::tableName();
$tbs = Service::tableName();
$sql = "select $tbl.* from $tbl
inner join $tbs on $tbl.serviceid = $tbs.id
where published = 1
and $tbs.code like :position
and $tbs.lang = :lang
and (finaldate is null or
(initialdate = :now))
and (options is null or length(options) = 0 or options like :country)
order by rand()
limit 1";
$postfix = ("ru" == $lang) ? "" : "_".$lang;
$query = self::findBySql($sql, [
":position"=>$type.$postfix,
":lang"=>$lang,
":now"=>$now,
":country"=>"%".$country."%"
]);
return $query->one();
}
Не могу понять, в чем проблема, пожалуйста, помогите. Если баннера нет, то страница загружается нормально для любого пользователя – авторизованного или гостя. Если есть баннер, то авторизованный пользователь видит и страницу, и баннер, но гость почему-то перенаправляется на сайт/логин
private static function getCountry() {
$ip = Yii::$app->request->userIP;
$geo = new SxGeo(Yii::getAlias('@data/SxGeo.dat'), SXGEO_BATCH);
return $geo->get($ip);
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... o-everyone
Действие Yii2 требует авторизации, хотя оно доступно каждому ⇐ Php
Кемеровские программисты php общаются здесь
-
Anonymous
1771263679
Anonymous
На странице публикуемого поста размещается динамический баннер (баннер берется из базы данных). Под авторизованным пользователем загружается нормально, но если захожу по URL без авторизации, то почему-то перенаправляет на сайт/логин. Если я удалю код баннера со страницы, то контент поста загружается нормально для любого пользователя, независимо от того, авторизован он или нет. Проблема возникает как в продакшене, так и на локальной машине.
URL страницы:
http://site.local/ru/topic/view?title=anons
Контроллер:
class TopicController extends Controller {
public $layout = 'main';
public $defaultAction = 'index';
public function behaviors() {
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
['allow' => true, 'actions' => ["create", "update", 'admin'], 'roles' => ['@']],
['allow' => true, 'actions' => ["index", "view"], 'roles' => ['?', '@']]
]
]];
}
/**
* Displays a particular model.
* @param string $title the title of the model to be displayed
*/
public function actionView($title) {
$model = Topic::findOne(["code"=>$title]);
if (empty($model))
return $this->redirect(['/404']);
if (!$model->published && (Yii::$app->user->isGuest))
return $this->redirect(['/404']);
if ($model->paid > 0)
Yii::$app->params["nofollow"] = 1;
return $this->render('view', array(
'model'=>$model
));
}
Просмотр:
[i][/i]
Просмотр баннера/просмотра:
id?>" data-bid="">
[url=" title="" target='_blank' rel="nofollow">
[img]" alt="" loading="lazy">
[/url]
Если я закомментирую строку
$banner = Banner::getRandom($type);
Тогда все работает как надо - страница загружается и не требует авторизации.
Поиск по баннеру:
public static function getRandom($type = "main_banner") {
$lang = Yii::$app->language;
$country = self::getCountry();
$now = date("Y-m-d");
$tbl = self::tableName();
$tbs = Service::tableName();
$sql = "select $tbl.* from $tbl
inner join $tbs on $tbl.serviceid = $tbs.id
where published = 1
and $tbs.code like :position
and $tbs.lang = :lang
and (finaldate is null or
(initialdate = :now))
and (options is null or length(options) = 0 or options like :country)
order by rand()
limit 1";
$postfix = ("ru" == $lang) ? "" : "_".$lang;
$query = self::findBySql($sql, [
":position"=>$type.$postfix,
":lang"=>$lang,
":now"=>$now,
":country"=>"%".$country."%"
]);
return $query->one();
}
Не могу понять, в чем проблема, пожалуйста, помогите. Если баннера нет, то страница загружается нормально для любого пользователя – авторизованного или гостя. Если есть баннер, то авторизованный пользователь видит и страницу, и баннер, но гость почему-то перенаправляется на сайт/логин
private static function getCountry() {
$ip = Yii::$app->request->userIP;
$geo = new SxGeo(Yii::getAlias('@data/SxGeo.dat'), SXGEO_BATCH);
return $geo->get($ip);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79861419/yii2-action-requires-authorization-although-its-available-to-everyone[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия