Используйте токен Yii1 CSRF в Yii2 - PullRequest
0 голосов
/ 06 января 2020

Я пытаюсь постепенно перенести приложение Yii1 в Yii2. До полного переноса проекта Yii1 и Yii2 должны работать вместе. Для этого я загрузил Yii Basi c и поместил его в каталог root. Затем внесены изменения в Yii1 / protected / config / main. php, чтобы разделить сеанс между Yii1 и Yii2.

components => array(
    'session' => array(
        'class' => 'CDbHttpSession',
        'sessionTableName' => 'session',
    ),
    'user' => array(
        'allowAutoLogin' => true,
        'authTimeout' => 3600 * 24 * 30,
        'stateKeyPrefix' => ''
    ),
)

После указанных изменений Yii1 и Yii2 совместно используют один и тот же сеанс.

На данный момент пользователь входит в систему через Yii1. Так как я могу передать CSRF Yii1 в Yii2? Таким образом, оба приложения работают с одним и тем же токеном CSRF. Начиная с того момента, когда yii2 генерирует CSRF, CSRF yii1 становится недействительным

То, что я имею, устанавливает CSRF Yii1 в Session, а затем в Yii2 генерирует CSRF, используя значение из сессии. Но не знаете, как этого добиться в Yii2?

Я попробовал ниже в своем глобальном контроллере в Yii 2.

Yii::$app->getSession()->set(Yii::$app->request->csrfParam,$_SESSION['csrf_token_value']);

Так что у меня будет CSRF Yii 1 в Yii2, но не уверен, как использовать это в Yii 2.

1 Ответ

0 голосов
/ 06 января 2020

Я решил его, изменив имя параметра CSRF для приложения Yii2, и он решил проблему.

т.е.

'request' => [
        'cookieValidationKey' => 'XXXXXXXXXXXXXXXXX',
        'enableCsrfValidation' => true,
        'csrfParam' => 'yii2_csrf'
    ],
...