Yii2 ошибка 403

trueorfalse

Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

403 ошибка

После как прописал правило входа на сайт, кроме главной в остальном при добавление к примеру записи появляется 403 ошибка.

trueorfalse

Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

Re: 403 ошибка

Сообщение

trueorfalse »

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

//...
use yii\filters\AccessControl;

class DefaultController extends Controller
{
  /**
   * @inheritdoc
   */
  public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'actions' => ['login', 'error'],
                        'allow' => true, // Разрешаем доступ к login и error
                    ],
                    [
                        'actions' => ['logout', 'index'],
                        'allow' => true,
                        'roles' => ['@'], // Только для авторизованных пользователей
                    ],
                ],
            ],            
        ];
    }
  //...
}

trueorfalse

Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

Re: 403 ошибка

Сообщение

trueorfalse »

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

yii\web\ForbiddenHttpException: Вам не разрешено производить данное действие. in \vendor\yiisoft\yii2\filters\AccessControl.php:154
Stack trace:
#0 \vendor\yiisoft\yii2\filters\AccessControl.php(137): yii\filters\AccessControl->denyAccess(Object(yii\web\User))
#1 \vendor\yiisoft\yii2\base\ActionFilter.php(75): yii\filters\AccessControl->beforeAction(Object(yii\base\InlineAction))
#2 [internal function]: yii\base\ActionFilter->beforeFilter(Object(yii\base\ActionEvent))
#3 \vendor\yiisoft\yii2\base\Component.php(545): call_user_func(Array, Object(yii\base\ActionEvent))
#4 \vendor\yiisoft\yii2\base\Controller.php(272): yii\base\Component->trigger('beforeAction', Object(yii\base\ActionEvent))
#5 \vendor\yiisoft\yii2\web\Controller.php(164): yii\base\Controller->beforeAction(Object(yii\base\InlineAction))
#6 \vendor\yiisoft\yii2\base\Controller.php(154): yii\web\Controller->beforeAction(Object(yii\base\InlineAction))
#7 \vendor\yiisoft\yii2\base\Module.php(523): yii\base\Controller->runAction('create', Array)
#8 \vendor\yiisoft\yii2\web\Application.php(102): yii\base\Module->runAction('post/create', Array)
#9 \vendor\yiisoft\yii2\base\Application.php(380): yii\web\Application->handleRequest(Object(yii\web\Request))
#10 \backend\web\index.php(17): yii\base\Application->run()
#11 {main}

Последний раз редактировалось trueorfalse 2017.08.27, 23:19, всего редактировалось 1 раз.

Аватара пользователя

Dominus

Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: 403 ошибка

Сообщение

Dominus »

Ошибка 403 (Forbidden, доступ запрещен)

Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!

Аватара пользователя

Dominus

Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: 403 ошибка

Сообщение

Dominus »

trueorfalse писал(а): ↑2017.08.27, 23:15

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

//...
use yii\filters\AccessControl;

class DefaultController extends Controller
{
  /**
   * @inheritdoc
   */
  public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'actions' => ['login', 'error'],
                        'allow' => true, // Разрешаем доступ к login и error для всех
                    ],
                    [
                        'actions' => ['logout', 'index', 'create', 'view', 'update, 'delete'],
                        'allow' => true,
                        'roles' => ['@'], // Только для авторизованных пользователей разрешено к actions: 'logout', 'index'.'create', 'view', 'update, 'delete'
                    ],
                ],
            ],            
        ];
    }
  //...
}

Последний раз редактировалось Dominus 2017.08.27, 23:33, всего редактировалось 1 раз.

Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!

trueorfalse

Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

Re: 403 ошибка

Сообщение

trueorfalse »

Dominus писал(а): ↑2017.08.27, 23:26

trueorfalse писал(а): ↑2017.08.27, 23:15

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

//...
use yii\filters\AccessControl;

class DefaultController extends Controller
{
  /**
   * @inheritdoc
   */
  public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'actions' => ['login', 'error'],
                        'allow' => true, // Разрешаем доступ к login и error для всех
                    ],
                    [
                        'actions' => ['logout', 'index'.'create', 'view', 'update, 'delete'],
                        'allow' => true,
                        'roles' => ['@'], // Только для авторизованных пользователей разрешено к actions: 'logout', 'index'.'create', 'view', 'update, 'delete'
                    ],
                ],
            ],            
        ];
    }
  //...
}

Спасибо сейчас попробую.

Не подскажешь так должно быть ?

В _csrf-backend
Храниться ‘badb6ffa114048dee3e7c70eed966af3a3070cbe0e84b6e024f8abdf8cbc081ca:2:{i:0;s:13:\»_csrf-backend\»;i:1;s:32:\»�`i�+�4Q�C咗d�X�9�������f$�|v\»;}’

Так должно быть вопросительные знаки ?

trueorfalse

Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

Re: 403 ошибка

Сообщение

trueorfalse »

Dominus писал(а): ↑2017.08.27, 23:18
Ошибка 403 (Forbidden, доступ запрещен)

Тот же результат, нет возможности в yii прописать просто логин прописать и по нему сверять?

Аватара пользователя

Dominus

Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: 403 ошибка

Сообщение

Dominus »

В _csrf-backend
Храниться ‘badb6ffa114048dee3e7c70eed966af3a3070cbe0e84b6e024f8abdf8cbc081ca:2:{i:0;s:13:\»_csrf-backend\»;i:1;s:32:\»�`i�+�4Q�C咗d�X�9�������f$�|v\»;}’

viewtopic.php?f=33&t=44487

в composer.json измените

на

и выполните команду

это исправление внесут при следующем релизе.

Последний раз редактировалось Dominus 2017.08.28, 00:01, всего редактировалось 1 раз.

Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!

Аватара пользователя

Dominus

Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: 403 ошибка

Сообщение

Dominus »

Dominus писал(а): ↑2017.08.27, 23:41

В _csrf-backend
Храниться ‘badb6ffa114048dee3e7c70eed966af3a3070cbe0e84b6e024f8abdf8cbc081ca:2:{i:0;s:13:\»_csrf-backend\»;i:1;s:32:\»�`i�+�4Q�C咗d�X�9�������f$�|v\»;}’

viewtopic.php?f=33&t=44487

в composer.json измените

на

и выполните команду

это исправление внесут при следующем релизе.

Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!

An Error occurred while handling another error: exception
‘yii\web\ForbiddenHttpException’ with message ‘You are not allowed to
perform this action.’ in
C:\wamp\www\k\kometonline\vendor\yiisoft\yii2\filters\AccessControl.php:151

I was getting this error too and found this page through Google so hopefully this will help other people.

The error happens because you’ve added access control but you also need to explicitly allow the ‘error’ action in the site controller otherwise you’ll get the same error. It’s not immediately obvious because there isn’t an action for it, also add the ‘captcha’ action, or you’ll get the same problem with that.

In your site controller:

public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'actions' => ['register','login'],
                        'allow' => true,
                        'roles' => ['?'],
                    ],
                    [
                        'actions' => ['logout'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                    [
                        //see captcha and error added here, this fixes the issue
                        'actions' => ['contact', 'about', 'terms', 'forgot', 'reset-password', 'captcha', 'error'],
                        'allow' => true,
                        'roles' => ['?', '@'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'logout' => ['post'],
                ],
            ],
        ];
    }

I’ve tried to add menu map in backend-side. I use yii2-advanced. This is my “controller” code:

public function actionMap()
{
    return $this->render('map');
}

But, when I try to access it with this url http://localhost/yii2advanced/backend/web/index.php?r=site/map, I’ve got error message Forbidden (#403) - You are not allowed to perform this action. I don’t understand why I got this error message, can anybody help me to fix this problem?

arogachev's user avatar

arogachev

33.2k7 gold badges114 silver badges117 bronze badges

asked Sep 8, 2015 at 2:35

Arta09's user avatar

1

It’s caused by AccessControl. Most likely the action map is blocked according to access rules. Example of allowing it for all authenticated users:

/**
 * @inheritdoc
 */ 
public function behaviors()
{
    return [
        'access' => [
            'class' => \yii\filters\AccessControl::className(),
            'only' => ['create', 'update'],
            'rules' => [                
                // allow authenticated users
                [
                    'allow' => true,
                    'roles' => ['@'],
                ],
                // everything else is denied
            ],
        ],
    ];
}

Alternatively you can adjust access according to some RBAC roles.

answered Sep 8, 2015 at 3:21

arogachev's user avatar

arogachevarogachev

33.2k7 gold badges114 silver badges117 bronze badges

0

In addition to the arogachev’s answer:
Paste it in your site controller:

   public function behaviors() {
    return [
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                [
                    'actions' => ['login', 'error'],
                    'allow' => true,
                ],
                [
                    'actions' => ['logout', 'index'],
                    'allow' => true,
                    'roles' => ['@'],
                ],
                [
                    'allow' => true,
                    'roles' => ['@'],
                ],
            ],
        ],
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'logout' => ['post'],
            ],
        ],
    ];
}

answered Apr 23, 2018 at 5:53

Faez Ahmed's user avatar

When handling a RESTful API request, if there is an error in the user request or if something unexpected
happens on the server, you may simply throw an exception to notify the user that something went wrong.
If you can identify the cause of the error (e.g., the requested resource does not exist), you should
consider throwing an exception along with a proper HTTP status code (e.g., [[yii\web\NotFoundHttpException]]
represents a 404 status code). Yii will send the response along with the corresponding HTTP status
code and text. Yii will also include the serialized representation of the
exception in the response body. For example:

HTTP/1.1 404 Not Found
Date: Sun, 02 Mar 2014 05:31:43 GMT
Server: Apache/2.2.26 (Unix) DAV/2 PHP/5.4.20 mod_ssl/2.2.26 OpenSSL/0.9.8y
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8

{
    "name": "Not Found Exception",
    "message": "The requested resource was not found.",
    "code": 0,
    "status": 404
}

The following list summarizes the HTTP status code that are used by the Yii REST framework:

  • 200: OK. Everything worked as expected.
  • 201: A resource was successfully created in response to a POST request. The Location header
    contains the URL pointing to the newly created resource.
  • 204: The request was handled successfully and the response contains no body content (like a DELETE request).
  • 304: The resource was not modified. You can use the cached version.
  • 400: Bad request. This could be caused by various actions by the user, such as providing invalid JSON
    data in the request body, providing invalid action parameters, etc.
  • 401: Authentication failed.
  • 403: The authenticated user is not allowed to access the specified API endpoint.
  • 404: The requested resource does not exist.
  • 405: Method not allowed. Please check the Allow header for the allowed HTTP methods.
  • 415: Unsupported media type. The requested content type or version number is invalid.
  • 422: Data validation failed (in response to a POST request, for example). Please check the response body for detailed error messages.
  • 429: Too many requests. The request was rejected due to rate limiting.
  • 500: Internal server error. This could be caused by internal program errors.

Customizing Error Response

Sometimes you may want to customize the default error response format. For example, instead of relying on
using different HTTP statuses to indicate different errors, you would like to always use 200 as HTTP status
and enclose the actual HTTP status code as part of the JSON structure in the response, like shown in the following,

HTTP/1.1 200 OK
Date: Sun, 02 Mar 2014 05:31:43 GMT
Server: Apache/2.2.26 (Unix) DAV/2 PHP/5.4.20 mod_ssl/2.2.26 OpenSSL/0.9.8y
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8

{
    "success": false,
    "data": {
        "name": "Not Found Exception",
        "message": "The requested resource was not found.",
        "code": 0,
        "status": 404
    }
}

To achieve this goal, you can respond to the beforeSend event of the response component in the application configuration:

return [
    // ...
    'components' => [
        'response' => [
            'class' => 'yii\web\Response',
            'on beforeSend' => function ($event) {
                $response = $event->sender;
                if ($response->data !== null && !empty(Yii::$app->request->get('suppress_response_code'))) {
                    $response->data = [
                        'success' => $response->isSuccessful,
                        'data' => $response->data,
                    ];
                    $response->statusCode = 200;
                }
            },
        ],
    ],
];

The above code will reformat the response (for both successful and failed responses) as explained when
suppress_response_code is passed as a GET parameter.

В каждом ответе Http-протокола существует некий 3-х значный код. Он позволяет клиенту правильно трактовать полученный результат. Думаю всем веб-мастерам хорошо известен код «404 — Not found». Кодов на самом деле огромное множество, все они описаны в спецификации Http протокола. Но знать все не обязательно. Главное при создании Exception (исключения) выбрать правильную группу кодов ответа. Групп всего 5:

  • 1xx Информационные сообщения
  • 2xx Успешное выполнение запроса
  • 3xx Перенаправления (редирект)
  • 4xx Ошибки клиента
  • 5xx Ошибка на сервере

К ошибкам клиента относятся обращения к несуществующей странице, к запрещенной странице, неправильные параметры запроса, вызов не существующего метода, слишком большое количество запросов.
К серверным ошибкам относятся внутренние ошибки сервера, недоступность сервиса или отсутствие поддержки данной версии протокола.
Из всего вышесказанного становится понятно, что разработчику для корректной обработки ошибок нужны коды из 4 группы.

HttpException в Yii2

Зачем вообще нужны Exception? Для того, чтобы в случаи неожиданной ошибки, приложение могло сообщить о том, что его работа прекращена по такой-то причине. Exception можно отлавливать и обрабатывать, например с помощью конструкции try catch.
В Yii2 есть класс \yii\web\HttpException с помощью которого можно создать любое исключение.

 throw new HttpException(404 ,'User not found');

Так же существуют классы со звучными именами для наиболее часто используемых типов ошибок, благодаря которым вам не нужно запоминать код ответа.

  • BadRequestHttpException — 400 ошибка
  • UnauthorizedHttpException — 401 ошибка
  • ForbiddenHttpException — 403 ошибка
  • NotFoundHttpException — 404 ошибка
  • MethodNotAllowedHttpException — 405 ошибка
  • NotAcceptableHttpException — 406 ошибка
  • ConflictHttpException — 409 ошибка
  • GoneHttpException — 410 ошибка
  • UnsupportedMediaTypeHttpException — 415 ошибка
  • TooManyRequestsHttpException — 429 ошибка
  • ServerErrorHttpException — 500 ошибка

Все они отнаследованы от \yii\web\HttpException и не нуждаются указании кода ответа.

 throw new NotFoundHttpException('User not found');

Установить статус ответа можно и с помощью метода setStatusCode() класса yii\web\Response

Yii::$app->response->setStatusCode(422);

Это удобно тогда, когда есть необходимость передать что-либо в теле ответа.

Понравилась статья? Поделить с друзьями:
  • Yii2 отключить вывод ошибок
  • Youtube на телефоне код ошибки 400
  • Youtube произошла ошибка повторите попытку ios
  • Yii2 500 ошибка
  • Youtube ошибка 400 4pda