2015-07-16 2 views
0

Я установил и настроил расширенный шаблон yii2. Все говорят, что они хотят отделить входной логин от входа в систему, но я хочу сделать наоборот.Yii2 Advanced Template

Что я хочу, когда я вхожу в систему для входа в систему, я также должен оставаться на стороне сервера. Я пробовал разные конфигурации, но когда я вхожу в систему для входа в интерфейс и перехожу в бэкэнд-зону, я гость!

интерфейс: photography.dev бэкенд: admin.photography.dev

По умолчанию все говорит, что yii2 расширенный шаблон имеет тот же логин для обоего: внешнего и внутреннего, но в моем случае это не так.

EDIT: обновление с полным бэкэндом, фронтэнда и общих конфигов

Общие:

return [ 
'vendorPath' => dirname(dirname(__DIR__)) . '/vendor', 
'components' => [ 
    'cache' => [ 
     'class' => 'yii\caching\FileCache', 
    ], 
], 
]; 

Backend:

<?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', 
'basePath' => dirname(__DIR__), 
'controllerNamespace' => 'backend\controllers', 
'bootstrap' => ['log'], 
'modules' => [], 
'components' => [ 
    'user' => [ 
     'identityClass' => 'common\models\User', 
     'enableAutoLogin' => true, 
     'enableSession' => true, 
     'idParam' => '_user', 
     'identityCookie' => [ 
      'name' => '_user', 
      'path'=>'/' 
     ] 
    ], 
    'urlManager' => [ 
     'enablePrettyUrl' => true, 
     'showScriptName' => false, 
     'rules' => [ 
      '/' => 'site/index', 
      '<alias:login|logout|about|contact>' => 'site/<alias>' 
     ] 
    ], 
    'urlManagerFrontEnd' => [ 
     'class' => 'yii\web\urlManager', 
     'baseUrl' => 'http://photography.dev', 
     'enablePrettyUrl' => true, 
     'showScriptName' => false, 
    ], 
    'log' => [ 
     'traceLevel' => YII_DEBUG ? 3 : 0, 
     'targets' => [ 
      [ 
       'class' => 'yii\log\FileTarget', 
       'levels' => ['error', 'warning'], 
      ], 
     ], 
    ], 
    'errorHandler' => [ 
     'errorAction' => 'site/error', 
    ], 
], 
'params' => $params, 
]; 

Backend среда Dev:

$config = [ 
'components' => [ 
    'request' => [ 
     // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation 
     'cookieValidationKey' => '', 
    ], 
], 
]; 

Frontend:

<?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', 
'basePath' => dirname(__DIR__), 
'bootstrap' => ['log'], 
'controllerNamespace' => 'frontend\controllers', 
'components' => [ 
    'user' => [ 
     'identityClass' => 'common\models\User', 
     'enableAutoLogin' => true, 
     'enableSession' => true, 
     'idParam' => '_user', 
     'identityCookie' => [ 
      'name' => '_user', 
      'path'=>'/' 
     ] 
    ], 
    'urlManager' => [ 
     'enablePrettyUrl' => true, 
     'showScriptName' => false, 
     'rules' => [ 
      '/' => 'site/index', 
      'index' => 'site/index', 
      '<alias:login|logout|about|contact|index>' => 'site/<alias>' 
     ], 
    ], 
    'urlManagerBackend' => [ 
     'class' => 'yii\web\urlManager', 
     'baseUrl' => 'http://admin.photography.dev', 
     'enablePrettyUrl' => true, 
     'showScriptName' => false, 
    ], 
    'log' => [ 
     'traceLevel' => YII_DEBUG ? 3 : 0, 
     'targets' => [ 
      [ 
       'class' => 'yii\log\FileTarget', 
       'levels' => ['error', 'warning'], 
      ], 
     ], 
    ], 
    'errorHandler' => [ 
     'errorAction' => 'site/error', 
    ], 
], 
'params' => $params, 
]; 

Frontend DEV среда:

$config = [ 
'components' => [ 
    'request' => [ 
     // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation 
     'cookieValidationKey' => 'iGk90GAbgQg2jT5aQ5PMcG1A3A9E_iNq', 
    ], 
], 
]; 

ответ

1

Убедитесь, что файл cookie использует те же настройки как в интерфейсе, так и в качестве внутренней части. Потому что ваш раздел администратора находится в подобласти и Yii принимает, что в качестве значения домена по умолчанию, вы должны также установить настройки домена, например, следующим образом:

'user' => [ 
    'identityClass' => 'common\models\User', 
    'enableAutoLogin' => true, 
    'identityCookie' => [ 
     'name'  => '_identity', 
     'path'  => '/', 
     'httpOnly' => true, 
     'domain' => 'photography.dev', 
    ], 
], 
'session' => [ 
    'name' => 'PHPFRONTENDBACKENDSESSID', 
    'cookieParams' => [ 
     'httpOnly' => true, 
     'path'  => '/', 
     'domain' => 'photography.dev', 
    ], 
], 

Браузер будет всегда использовать конкретные кук, так cookie на admin.photography.dev отменит файл cookie на фотографии.dev

Редактировать: если вы хотите также изменить файл cookie csrf, вы можете использовать его в интерфейсе/config/main.php и backend/config/main .php:

'request' => [ 
    'baseUrl' => '', 
    'csrfParam' => '_csrf', 
    'csrfCookie' => [ 
     'httpOnly' => true, 
     'path'  => '/', 
     'domain' => 'photography.dev', 
    ], 
], 

Если вы это сделаете, убедитесь, что t он cookieValidationKey в frontend/config/main-local.php и backend/config/main-local.php те же.

+0

Даже с указанием, что вы хотите, чтобы ваш cookie администратора был на фото.dev? Нет другой конфигурации, перекрывающей это? – JonathanStevens

+0

Я что-то обнаружил: когда я открыл инструменты для разработчиков и перешел на Ресурсы - Cookies Я нашел это: ** admin.photography.dev ** - это имя файла cookie, когда я перехожу на http://admin.photography.dev ** фотография.dev ** - это имя файла cookie, когда я перехожу на http://photography.dev Поэтому, изменяя cookieParams для компонента сеанса, все, что он делает, добавляет PHPFRONTENDBACKENDSESSID к файлам cookie «admin.photography.dev» и «photography.dev» с доменом «фотография.dev». – florinmtsc

+0

Я проверил, и нет другой конфигурации, перекрывающей его. Я также добавил тот же ключ проверки cookie как для интерфейса, так и для бэкэнд. Он добавляет cookie PHPFRONTENDBACKENDSESSID в оба домена, и ничего больше. Я даже не могу войти в систему, когда я вхожу в систему, он перенаправляется на главную страницу, а затем снова приглашаю. То же самое для обоих приложений (frontend, backend) – florinmtsc

0

Вы должны использовать то же имя сеанса для обоих приложений для входа в систему pply для обоих приложений.

+0

Такое же имя сеанса не будет выполнено. Каждое приложение (frontend, backend) имеет свой идентификатор sess. Например, backend имеет сеанс с именем _backendSESSID и frontend _frontendSESSID или что-то подобное, отличное от того, которое я вводил в config. Я не знаю, какой сеанс используется для входа. Если кто-нибудь сможет объяснить процесс и как работает логин в yii, пожалуйста? – florinmtsc

Смежные вопросы