Действие Yii2 требует авторизации, хотя оно доступно каждомуPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Действие Yii2 требует авторизации, хотя оно доступно каждому

Сообщение 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
));
}

Просмотр:












Просмотр баннера/просмотра:

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»