google-bot и проверка доступа

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
raketa
Сообщения: 131
Зарегистрирован: 2011.07.28, 17:29

google-bot и проверка доступа

Сообщение raketa »

Первый вариант

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

    public function actionView($id)
    {
        if (!Yii::$app->user->can('user'))
            throw new ForbiddenHttpException('Доступ закрыт!');
            
        ....    
    }       
Второй вариант

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

    public function actionView($id)
    {
        Yii::$app->user->canEx('user');

         ......
     }
Это в WebUser

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

    public function canEx($permissionName, $params = [], $allowCaching = true)
    {
        if (!$this->can($permissionName, $params, $allowCaching)) {
            if ($this->getIsGuest())
                $this->loginRequired();
            else
                throw new ForbiddenHttpException('Доступ закрыт!');
        }
    }

Думал что результат должен быть одинаковым, но что интересно при втором варианте google-bot каким то чутом проходит проверку Yii::$app->user->canEx('user'); и выполняется код который ниже.
Почему есть мысли?

Аватара пользователя
samdark
Администратор
Сообщения: 9262
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: google-bot и проверка доступа

Сообщение samdark »

user, случайно, у вас не роль для всех юзеров по умолчанию?

raketa
Сообщения: 131
Зарегистрирован: 2011.07.28, 17:29

Re: google-bot и проверка доступа

Сообщение raketa »

Нет, если открыть страницу в браузере то все нормально перекидывает на страницу входа.
Смотрю логи сервера и куча ошибок от google-bot, ошибки именно ниже проверки, стоит поменять на первый вариант и сразу нормальные 403 ие ошибки.
Проект перенесли на Yii2, в Yii1 было аналогично и такого не наблюдалось

Аватара пользователя
samdark
Администратор
Сообщения: 9262
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: google-bot и проверка доступа

Сообщение samdark »

М... то есть гуглебот получает ForbiddenHttpException?

Аватара пользователя
samdark
Администратор
Сообщения: 9262
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: google-bot и проверка доступа

Сообщение samdark »

У вас просто по коду в первом и втором варианте прямо противоположные действия...

raketa
Сообщения: 131
Зарегистрирован: 2011.07.28, 17:29

Re: google-bot и проверка доступа

Сообщение raketa »

да срабатывает ForbiddenHttpException User-agent Mediapartners-Google
Sam Dark писал(а):У вас просто по коду в первом и втором варианте прямо противоположные действия...
тут не понял

Аватара пользователя
samdark
Администратор
Сообщения: 9262
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: google-bot и проверка доступа

Сообщение samdark »

Ну, if (!$this->can($permissionName, $params, $allowCaching)) { так и так сработает потому что гуглебот — гость и любой can для него вернёт false. А вот почему для гостя $this->getIsGuest() даёт true — большой вопрос.

raketa
Сообщения: 131
Зарегистрирован: 2011.07.28, 17:29

Re: google-bot и проверка доступа

Сообщение raketa »

Вы меня совсем запутали или я просто не до понимаю.
Совсем противоположное я не увидел, разница в первом и втором варианте по задумке лишь в том что второй вариант должен гостей перекидывать на страницу входа.
А вот почему для гостя $this->getIsGuest() даёт true
а что он должен выдать? оно для всех гостей вернет true, разве нет?

Аватара пользователя
samdark
Администратор
Сообщения: 9262
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: google-bot и проверка доступа

Сообщение samdark »

Тьфу. Описочка. Имел ввиду «почему для гостя $this->getIsGuest() даёт false». Гуглебот у вас точно гость. Соответственно, если у вас ForbiddenHttpException, то getIsGuest() выдал false.

raketa
Сообщения: 131
Зарегистрирован: 2011.07.28, 17:29

Re: google-bot и проверка доступа

Сообщение raketa »

Sam Dark писал(а):Тьфу. Описочка. Имел ввиду «почему для гостя $this->getIsGuest() даёт false». Гуглебот у вас точно гость. Соответственно, если у вас ForbiddenHttpException, то getIsGuest() выдал false.

не совсем так
ForbiddenHttpException я получаю если делаю по первому варианту т.е. проверка Yii::$app->user->can('user') срабатывает верно и боту выдается ошибка,
если же я делаю по второму варианту то получаю ошибки поторые ниже проверки Yii::$app->user->canEx('user');
получается проблема в
if ($this->getIsGuest())
$this->loginRequired();
получается что $this->loginRequired() не срабатывает

raketa
Сообщения: 131
Зарегистрирован: 2011.07.28, 17:29

Re: google-bot и проверка доступа

Сообщение raketa »

$this->getIsGuest() даёт true все верно, иначе бы была ошибка ForbiddenHttpException а её нет

Аватара пользователя
samdark
Администратор
Сообщения: 9262
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: google-bot и проверка доступа

Сообщение samdark »

Он срабатывает. Просто на этом выполнение скрипта не заканчивается. Добавьте return.

raketa
Сообщения: 131
Зарегистрирован: 2011.07.28, 17:29

Re: google-bot и проверка доступа

Сообщение raketa »

Sam Dark писал(а):Он срабатывает. Просто на этом выполнение скрипта не заканчивается. Добавьте return.
спасибо, только return не поможет, добавил Yii::$app->end()

lynicidn
Сообщения: 2221
Зарегистрирован: 2014.05.24, 15:12

Re: google-bot и проверка доступа

Сообщение lynicidn »

raketa писал(а):
Sam Dark писал(а):Он срабатывает. Просто на этом выполнение скрипта не заканчивается. Добавьте return.
спасибо, только return не поможет, добавил Yii::$app->end()
=) если будет ретурн будет и енд ;)

raketa
Сообщения: 131
Зарегистрирован: 2011.07.28, 17:29

Re: google-bot и проверка доступа

Сообщение raketa »

в той реализации которая есть енд без енд не будет

Ответить