-
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
33.2k7 gold badges114 silver badges117 bronze badges
asked Sep 8, 2015 at 2:35
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
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
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 aPOST
request. TheLocation
header
contains the URL pointing to the newly created resource.204
: The request was handled successfully and the response contains no body content (like aDELETE
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 theAllow
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 aPOST
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);
Это удобно тогда, когда есть необходимость передать что-либо в теле ответа.