Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
У меня стояла задача перенести магазин с престашоп, на ларавел.
В престашоп все (листинги, категории, атрибуты, все что отображается списком в таблице — фильтруется), и эти фильтры запоминаются. Я реализовал это через сессии. Ключем в сессии было название таблици модели, которая фильтруется
// Product model
public function getPaginated()
{
return $this->filterable()->paginate($this->table . self::PER_PAGE); // const PER_PAGE = '.per_page';
}
filterable — scope в котором я беру сохраненные фильтры из сессии для конкретной модели, и фильтрую модель по сохраненным в сессии фильтрам. Таким образом, если менеджер (или кто то еще) использовал фильтер ’показать только активные товары’, и потом пошел гулять по другим страницам в админке, а через n-ное кол-стао времени опять зашел в список товаров, фильтры которые он применял ранее сохранились, и отобрпзились только активные товары.
Можно сгенерировать сертификаты, и тогда проблем вообще не будит.
@echo OFF setlocal set OPENSSL_CONF=D:\Development\OSPanel\modules\http\Apache-PHP-7.2-x64\conf\openssl.cnf set PATH=%PATH%;D:\Development\OSPanel\modules\http\Apache-PHP-7.2-x64\bin set dname=site.dev set days=730 set key_bits=2048 set root_certs_path=D:\Development\OSPanel\userdata\config\cert_files echo [trust_cert] > %dname%.cnf echo subjectAltName=@alt_names >> %dname%.cnf echo keyUsage=digitalSignature,keyEncipherment,dataEncipherment >> %dname%.cnf echo extendedKeyUsage=serverAuth,clientAuth >> %dname%.cnf echo [alt_names] >> %dname%.cnf echo DNS.1 = %dname% >> %dname%.cnf echo DNS.2 = %dname%.ospanel.io >> %dname%.cnf openssl genrsa -out %dname%.key %key_bits% openssl req -sha256 -new -utf8 -key %dname%.key -out %dname%.csr -subj /emailAddress="info\@ospanel\.io"/C=RU/stateOrProvinceName="Russian Federation"/L=Moscow/O="Open Server Panel"/OU=Software/CN=%dname% rem Для создания сертификата, подписанного доверенным сертификатом openssl x509 -sha256 -req -days %days% -in %dname%.csr -extfile %dname%.cnf -extensions trust_cert -CA %root_certs_path%\rootCA.crt -CAkey %root_certs_path%\rootCA.key -out %dname%.crt del %dname%.csr del %dname%.cnf pause
Замените пути на свои, сохраните с расширением cmd, и запустите. Сертификаты будут созданы. Затем копируете их в ПУТЬ ДО ОПЕН СЕРВЕРА\userdata\config\cert_files.
Затем копируете конфиг активного сервера, он находится в ПУТЬ ДО ОПЕН СЕРВЕРА\userdata\config\Apache-PHP-7.2-x64_vhost (в моем случае так), и вставляете его в папку с проектом (где находится точка входа в приложение), для ларавела это public.
Меняете в этом конфиге пути до сертификатов. В моем случае это
SSLCertificateFile "D:\Development\OSPanel\userdata\config\cert_files\site.dev.crt" SSLCertificateKeyFile "D:\Development\OSPanel\userdata\config\cert_files\site.dev.key"
Вот тут есть решение https://laravel.ru/forum/viewtopic.php?id=3119
- проставить специальный флаг для всех старых пользователей.
в общем, ты дал ответ — использовать два разных хэша, для старых и новых.
- При регистрации просто доверь всё делать Laravel, у новых юзеров никаких вариантов не будет.
А при аутентификации пытайся применить дефолтовый метод, а при неудаче — старый. И если вдруг старый сработал, то тут же генерируй и сохраняй новый хеш. Только в этот момент у тебя есть такая возможность, т.к. ты обладаешь незашифрованным паролем и знаешь, что он верный.
Спасибо. так и сделал
Нашел где престашоп хеширует пароль
https://github.com/PrestaShop/PrestaShop/blob/1.6.1.x/classes/Tools.php#L1180
сам _COOKIE_KEY_ на лок сервере вот так выглядит
define('_COOKIE_KEY_', '0d6Z7qEgRr1hPzspEfrpUFo7NT3YxeKVxMSx2sxqTantiF66Vbuzpaop');
Окей, теперь ясно как все это хешируется.
Теперь новый вопрос: как сделать что бы у новых покупателей пасс хешировался ларавелевским хешером, а старые использовали кастомный хешер? И как определять старый это покупатель, или новый?)