Действие 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
));
}
Просмотр:

Код: Выделить всё

    





[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();
}
Не могу понять, в чем проблема, пожалуйста, помогите. Если баннера нет, то страница загружается нормально для любого пользователя – авторизованного или гостя. Если есть баннер, то авторизованный пользователь видит и страницу, и баннер, но гость почему-то перенаправляется на сайт/логин

Подробнее здесь: https://stackoverflow.com/questions/798 ... o-everyone
Ответить

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

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

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

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

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