понедельник, 26 декабря 2016 г.

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

На Yii2 сделана защита от CSRF-атак. Когда она срабатывает, то при отправке формы вы получаете ошибку "Не удалось проверить переданные данные".

Я столкнулся с тем, что эта ошибка появлялась случайным образом. В итоге выяснилось, что проблема в настройках куки.

Два моих приложения, "backend" и "frontend", имели разный код для шифровки кук: "cookieValidationKey". Он настраивается в файле "config/main-local.php" для каждого из приложений.

Из-за этого, открыв сначала страницу на одном приложении, а потом на другом, сбрасывался CSRF-код - ведь шифровали куки с одним ключом, а расшифровывать пытаемся с другим.

Решение: прописать в конфигах одинаковые значения для "cookieValidationKey". Теперь всё работает )

четверг, 22 декабря 2016 г.

Решение конфликтов при слиянии для файлов Composer.

Как решить конфликты файлов "composer.lock" и "composer.json" при слиянии веток?

Обычно ситуация такая. Вы в своей ветке добавляете новые пакеты Composer, ваш напарник тоже добавляет новые пакеты Composer в своей ветке.
Оба файла "composer.json" и "composer.lock" при этом находятся в репозитории.

Попытавшись вытянуть изменения напарника, сделать слияние веток, вы скорее всего получите конфликт по обоим файлам. А если он ещё делал "composer update" по всем пакетам, то это практически гарантированно.

Не беспокойтесь, решается это достаточно просто.

1. Посмотрите composer.json - какие изменения были от вас, а какие от напарника.
Особенно запомните, какие изменения вносили вы.

2. Сбросьте оба файла на "внешнюю" версию ("theirs"). Таким образом, содержимое у них будет как в той ветке, из которой вы тянете изменения в свою.
Конфликты отмечаем как решённые, завершаем слияние.
Прогоняем "composer install". Вытянутся пакеты напарника.

3. Добавьте ваши изменения ещё раз. Это занимает немного времени, написать один или несколько раз "composer require" для нужных вам пакетов.

Теперь можно выкатывать обновлённые файлы "composer.json" и "composer.lock", они будут корректно работать.

суббота, 3 декабря 2016 г.

Создание проекта Yii2 по шаблону Ганимед

Ганимед - это мой шаблон для быстрой разработки сайтов. В него включены все минимально необходимые модули и настройки.

Шаблон разработан на базе "yiisoft/yii2-app-advanced".

https://github.com/Nex-Otaku/yii2-app-ganimede

Установка

1. Используем репозиторий https://github.com/Nex-Otaku/yii2-app-ganimede

Запускаем консоль OpenServer.
cd domains
composer create-project --prefer-dist --stability=dev nex-otaku/yii2-app-ganimede myhost.local

2. После установки
cd myhost.local
init
0
y

3. Создаём БД в менеджере БД.

4. Настраиваем подключение.

Указываем IP, указанный в настройках OpenServer,
либо "localhost", если не настроен доступ к серверу по локальной сети.
common/config/main-local.php
'dsn' => 'mysql:host=my.super.host.ip;dbname=mysuperdbname',

5. Запускаем миграцию, которая поднимает необходимые таблицы.
Запускаем консоль OpenServer.
cd domains
cd myhost.local
yii migrate

Автоматический вход SSH с помощью ключей

Задача: полностью автоматизировать вход пользователя на сервер посредством putty, по протоколу SSH.

Для этого нам понядобятся ключи авторизации SSH.


1. Создаём ключ на сервере.
ssh-keygen -t rsa

2. Сохраняем ключ в предлагаемый файл (/home/myuser/.ssh/id_rsa)

3. При необходимости указываем пароль на использование приватного ключа.
В этом случае его необходимо будет вводить при каждой новой сесии.

4. Копируем публичный ключ id_rsa.pub в authorized_keys
cd .ssh
cp id_rsa.pub authorized_keys

6. Проверяем права на файл. 
Должны быть 600, иначе может не сработать. Если права отличаются, устанавливаем значение 600.
chmod 600 authorized_keys

7. Копируем приватный ключ id_rsa в файл на локальном комьютере (например my_session.ppk)
more id_rsa

8. Прогоняем скопированный приватный ключ через puttygen.exe делая приватный ключ пригодным к использованию. (Там есть кнопочка "Load", напротив надписи "Load an existing private key file", юзаем сначала ее, а затем нажимаем "Save private key".)

9. Открываем Putty, загружаем нашу сессию, идем в SSH->Auth, указываем путь к готовому приватному ключу.

10. Идем в Connection->Data и в секции Auto-login в поле username указываем логин сессии

11. При необходимости в пункте меню SSH в поле Remote Command можно указать команду, которая автоматически будет выполняться при входе пользователя.

12. Сохраняем сессию.

13. Делаем отдельный ярлык Putty, в котором указываем имя сессии, чтобы при запуске ярлыка нужная сессия запускалась автоматически.
"C:\Program Files (x86)\PuTTY\putty.exe" -load "mycoolproject"

Всё готово. Теперь по клику на ярлык откроется консоль на вашем сервере. Удобно и безопасно.

Инструкцию нашёл здесь: http://xpoint.ru/forums/computers/os/unix/thread/40057.xhtml

Развёртывание проекта с BitBucket на удалённый сервер.

1. Выбираем публичный ключ SSH, он хранится в файле "/.ssh/id_rsa.pub" в домашней папке.
Если его нет, создаём по инструкции.
Копируем содержимое ключа в буфер обмена.

Внимание: если вы копируете ключ с экрана Putty, то в буфере обмена ключ может быть разбит на несколько строк. Нам это не нужно. Уберите переводы строк. Весь ключ должен быть в одной длинной-длинной строке.

2. В настройках репозитория Битбакета добавляем в разделе "Access keys".
Теперь пользователь может читать из репозитория без ввода пароля, доступ осуществляется по ключу.

3. Клонируем репозиторий.
git clone CoolUser@bitbucket.org:CoolUser/cool-repo.git