Ошибка "Не удалось проверить переданные данные"[Решено]

Всё про контроль доступа пользователей: фильтры, RBAC, проверки
Ответить
Аватара пользователя
svil
Сообщения: 547
Зарегистрирован: 2018.02.12, 22:41

Ошибка "Не удалось проверить переданные данные"[Решено]

Сообщение svil » 2019.06.24, 09:52

В строке браузера набираю boxic/admin и меня перенаправляет по дефолту на главную страницу админки site/index
Если кликаю по кнопке со ссылкой - /admin в админку переходит, но выдает ошибку "Не удалось проверить переданные данные"
main.php бэкэнда

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

<?php
$params = array_merge(
    require __DIR__ . '/../../common/config/params.php',
    require __DIR__ . '/../../common/config/params-local.php',
    require __DIR__ . '/params.php',
    require __DIR__ . '/params-local.php'
);

return [
    'id' => 'app-backend',
    'name' => '..."',
    'language' => 'ru-RU',
    'basePath' => dirname(__DIR__),
    'controllerNamespace' => 'backend\controllers',
    'bootstrap' => ['log'],
    'defaultRoute'=>'site/index',
    'layout' => 'cp',
    'modules' => [],
   // 'homeUrl' => '/admin',
    'components' => [
        'request' => [
           'baseUrl' => '/admin',
            'cookieValidationKey' => $params['cookieValidationKey'],
            'csrfParam' => '_csrf-backend',
        ],
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => true,
           // 'identityCookie' => ['name' => '_identity-backend', 'httpOnly' => true],
            'identityCookie' => ['name' => '_identity', 'httpOnly' => true,
              //  'domain' => $params['cookieDomain']
            ],

        ],
        'session' => [
            // this is the name of the session cookie used for login on the backend
          //  'name' => 'advanced-backend',
            'name' => 'advanced',
            'cookieParams' =>[
                'httpOnly' => true,
              //  'domain' => $params['cookieDomain'],
            ]
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],

        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                '<controller>' => '<controller>/index'],
        ],

    ],
    'params' => $params,
];


site/index бэкэнда

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

<?php
namespace backend\controllers;

use Yii;
use yii\web\Controller;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;
use common\models\LoginForm;
use common\models\User;

/**
 * Site controller
 */
class SiteController extends Controller
{
    /**
     * {@inheritdoc}
     */

    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['*'],
                'rules' => [
                    [
                        'allow' => true,
                        'roles' => ['admin', 'manager'],
                    ],
                    
                ],
                'denyCallback' => function () {
                    return Yii::$app->response->redirect(['./../../']);
                },
            ],
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
        ];
    }

    /**
     * Displays homepage.
     *
     * @return string
     */
    public function actionIndex()
    {
//        if (!Yii::$app->getUser()->can('manager')) {
//            return $this->redirect(Yii::$app->urlManager->createUrl('./../../'));
//        }
        return $this->render('index');
    }

    /**
     * Login action.
     *
     * @return string
     */
    public function actionLogin()
    {
        if (!Yii::$app->user->isGuest) {
            return $this->goHome();
        }

        $model = new LoginForm();
        if ($model->load(Yii::$app->request->post()) && $model->login()) {
            return $this->goBack();
        } else {
            $model->password = '';

            return $this->render('login', [
                'model' => $model,
            ]);
        }
    }




//$g=User::findOne('22');
//$result = User::getPassword2($g->password, $g->password_hash); //9





    /**
     * Logout action.
     *
     * @return string
     */
    public function actionLogout()
    {
        Yii::$app->user->logout();
        return $this->redirect(Yii::$app->urlManager->createUrl('./../../'));
        //return $this->goHome();
    }

}

Вид фронтенда, откуда переход на бэкэнд

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

 <div class="col-lg-12">

                <?php if (Yii::$app->user->isGuest): ?>
                    <?php $form = ActiveForm::begin(['id' => 'login-form', 'fieldConfig' => ['enableLabel'=>false]]); ?>
                    <?= $form->field($model, 'password', ['enableLabel' => false])
                        ->widget(\yii\widgets\MaskedInput::className(), [
                            'mask' => '9999-9999-99',
                        ])
                        ->textInput(array('placeholder' => 'xxxx-xxxx-xx', 'class'=>'form-control text-center')); ?>
                    <div class="form-group">
                        <?= Html::submitButton('Вход', ['class' => 'btn btn-success', 'name' => 'login-button']) ?>
                    </div>
                    <?php ActiveForm::end(); ?>
                <?php elseif (Yii::$app->getUser()->can('manager')): ?>
                    <?= '<div class="form-group">'
                    //. Html::beginForm(['/site/logout'], 'post')
                    . Html::beginForm(['/admin'], 'post') . //вот кнопка перехода
                    . Html::submitButton(
                        'Вход (' . Yii::$app->user->identity->surname . ')',
                        ['class' => 'btn btn-success', 'name' => 'login-button']
                    )
                    . Html::endForm()
                    . '</div>' ?>
                <?php elseif (Yii::$app->getUser()->can('indexEdu')): ?>
                    <?= '<div class="form-group">'
                    //. Html::beginForm(['/site/logout'], 'post')
                    . Html::beginForm(['/edu/index'], 'post')
                    . Html::submitButton(
                        'Вход (' . Yii::$app->user->identity->surname . ')',
                        ['class' => 'btn btn-success', 'name' => 'login-button']
                    )
                    . Html::endForm()
                    . '</div>' ?>
                <?php endif ?>

            </div>
main.php фронтенда

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

<?php
$params = array_merge(
    require __DIR__ . '/../../common/config/params.php',
    require __DIR__ . '/../../common/config/params-local.php',
    require __DIR__ . '/params.php',
    require __DIR__ . '/params-local.php'
);

return [
    'id' => 'app-frontend',
    'language' => 'ru-RU',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'name' => '..."',
    'controllerNamespace' => 'frontend\controllers',
    'components' => [
        'authManager' => [
            'class' => 'yii\rbac\DbManager',
        ],

        'request' => [
            'csrfParam' => '_csrf-frontend',
            'cookieValidationKey' => $params['cookieValidationKey'],
            'baseUrl' => ''
        ],
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => true,
           // 'identityCookie' => ['name' => '_identity-frontend', 'httpOnly' => true],
            'identityCookie' => ['name' => '_identity', 'httpOnly' => true,
            //    'domain' => $params['cookieDomain']
            ],

        ],
        'session' => [
            // this is the name of the session cookie used for login on the frontend
           // 'name' => 'advanced-frontend',
            'name' => 'advanced',
            'cookieParams' =>[
                'httpOnly' => true,
               // 'domain' => $params['cookieDomain'],
            ]
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],

        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                '<controller>' => '<controller>/index'
            ],
        ],

    ],
    'params' => $params,
];
Последний раз редактировалось svil 2019.06.24, 12:15, всего редактировалось 1 раз.

Аватара пользователя
svil
Сообщения: 547
Зарегистрирован: 2018.02.12, 22:41

Re: Ошибка "Не удалось проверить переданные данные"

Сообщение svil » 2019.06.24, 11:43

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

yii\web\BadRequestHttpException: Не удалось проверить переданные данные. in /Users/svetlanailina/Sites/boxic/vendor/yiisoft/yii2/web/Controller.php:166
Stack trace:
#0 /Users/svetlanailina/Sites/boxic/vendor/yiisoft/yii2/base/Controller.php(155): yii\web\Controller->beforeAction(Object(yii\base\InlineAction))
#1 /Users/svetlanailina/Sites/boxic/vendor/yiisoft/yii2/base/Module.php(528): yii\base\Controller->runAction('index', Array)
#2 /Users/svetlanailina/Sites/boxic/vendor/yiisoft/yii2/web/Application.php(103): yii\base\Module->runAction('', Array)
#3 /Users/svetlanailina/Sites/boxic/vendor/yiisoft/yii2/base/Application.php(386): yii\web\Application->handleRequest(Object(yii\web\Request))
#4 /Users/svetlanailina/Sites/boxic/backend/web/index.php(18): yii\base\Application->run()
#5 {main}

Аватара пользователя
svil
Сообщения: 547
Зарегистрирован: 2018.02.12, 22:41

Re: Ошибка "Не удалось проверить переданные данные"

Сообщение svil » 2019.06.24, 11:47

Ура получилось
в SiteController бэкэнда

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

  public function beforeAction($action)
    {
        if ($action->id == 'index') {
            $this->enableCsrfValidation = false;
        }

        return parent::beforeAction($action);
        return false;
    }

Ответить