Защита админист та тив ан но па анели
Защита админист та тив ан но па анели
Административнаяпанельдолжнабытьдоступнатолькодовереннымлицам。ЗащититьеёможноспомощьюкомпонентаSymfon欧宝娱乐app下载地址y的安全。
Определение сущности пол зовател
Несмотрянато,чтопосетителинесмогутсоздаватьучётныезаписинасайтесамостоятельно,мысоздадимполнофункциональнуюсистемуаутентификациидляадминистратора。Поэтомуунасбудеттолькоодинпользователь-администраторсайта。
На пер р о ом м а а с а а о те о еделим сущность用户
.Чтобы избежать возможной путаницы, на азо ов и м м её管理
.
Для инте т ра н ии и сущности管理
ссистемойаутентификацииSym欧宝娱乐app下载地址fony安全、онадолжнасоответствоватьопределённымтребованиям。Например, на али и ие с о о ст а密码
являетсяобязательным。
Для создани сущности管理
у о полнит т с спе в иал н н с оманду:用户
вместообычной:实体
.
1
$欧宝娱乐app下载地址symfony控制台make: Admin用户
Ответьтенавопросывтерминале:использоватьлид教义ляхраненияадминистраторов(是的
),какоеизсвойствиспользоватьдляотображенияимениадминистратора(用户名
), должен ли каждый пол зо а ате ли мет парол (是的
).
Созданный класс сс содержит методы в оде将getRoles ()
,eraseCredentials ()
имногиедруги,енеобходимыеSymf欧宝娱乐app下载地址onyдлясистемыаутентификации。
Используйтекоманду:实体
,есливамнужнодобавитьдополнительныесвойствавсущность管理
.
Также да а а а а а а м метод__toString ()
, так как е о о испол з о е и EasyAdmin:
12 3 4 5 6 7 8 9 10 11 12 13 14
——/ src /实体/ Admin.php+ + + b / src /实体/ Admin.php@@类Admin实现UserInterface, PasswordAuthenticatedUserInterface返回(string) $this->用户名;}+公共函数__toString():字符串+ {+返回$this->用户名;+}+/** * @查看UserInterface */
Помимо созда ани само к сущности管理
,командатакжеобновитконфигурациюбезопасностиисвяжетсущностьссистемойаутентификации:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
——/ config /包/ security.yaml+ + + b / config /包/ security.yaml@@ -5,14 +5,18 @@ security: 欧宝娱乐app下载地址Symfony\Component\ security \Core\User\PasswordAuthenticatedUserInterface: 'auto' # //www.oldmanjams.com/doc/current/security.html#loading-the-user-the-user-provider提供商:—users_in_memory: {memory: null}+ #用于从会话和其他功能中重新加载用户(例如switch_user)+ app_user_provider:+实体:+类:应用程序\实体\管理+属性:用户名防火墙:dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false main: lazy: true—provider: users_in_memory+ provider: app_user_provider#激活不同的身份验证方式# //www.oldmanjams.com/doc/current/securi欧宝娱乐app下载地址ty.html#the-firewall
Выборнаилучшегоалгоритмадляхешированияпаролей(которыйсовременембудетменяться)мыоставимнаусмотрениеSymfony。欧宝娱乐app下载地址
Пришловремясоздатьмиграциюиприменитьеёкбазеданных:
1 2
$欧宝娱乐app下载地址Symfony控制台make:迁移$欧宝娱乐app下载地址Symfony控制台原则:迁移:migrate -n
Создание парол дл админист т ато а
Таккакунасбудетвсеголишьодинадминистратор,мынебудемразрабатыватьотдельнуюсистемудлясозданияадминистраторскихучётныхзаписей。В ка а е ест т ол о о ина испол з ем管理
захешируем па с ол л。
Придумайтелюбойпарольиприпомощиследующейкомандызахешируйтеего:
1
$欧宝娱乐app下载地址Symfony控制台安全性:哈希密码
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
欧宝娱乐app下载地址Symfony密码散列效用 ============================= 输入你的密码散列:> ------------------ --------------------------------------------------------------------------------------------------- 键值 ------------------ --------------------------------------------------------------------------------------------------- 切肉机使用Symfony \ Pas欧宝娱乐app下载地址swordHasher \切肉机\ \组件MigratingPasswordHasher密码散列argon2id v = 19美元= 65536美元,t = 4, p = 1 BQG + jovPcunctc30xG5PxQ TiGbx451NKdo + g9vLtfkMy4KjASKSOcnNxjij4gTX1s美元 --------------------------------------------------------------------------------------------------------------------- ![注]使用自盐散列器:散列器生成自己的内置盐。[OK] Password hashing succeeded .密码散列成功
Созданиеадминистратора
Добавьтеадминистратора,используяследующийSQL -запрос:
1 2 3
$欧宝娱乐app下载地址Symfony运行PSQL -c"INSERT INTO admin (id,用户名,角色,密码)\ VALUES (nextval('admin_id_seq'), 'admin', '[\"ROLE_ADMIN\"]', \ '\$argon2id\$v=19\$m=65536,t=4,p=1\$BQG+jovPcunctc30xG5PxQ\$TiGbx451NKdo+g9vLtfkMy4KjASKSOcnNxjij4gTX1s')"
Обратите вани м мание ни и о ова а$
в столб б л ол;к к к ани и у у у т т т и и в !
Настройкааутентификации
Теперь,когдаунасестьпользовательсправамиадминистратора,мыможемзащититьадминистративнуюпанель。欧宝娱乐app下载地址Symfonyподдерживаетнесколькостратегийаутентификации。Давайтевоспользуемсяклассическойидостаточнопопулярнойсис стемо о ка т тентифика ии ис с помощью формы.
Выполнитекоманду:身份验证
,чтобыобновитьконфигурациюбезопасности,сгенерироватьшаблонсформойвхода,атакжесоздатьаутентификатор(класс сс с л лени а а т тентиф - ика ав ие н):
1
$欧宝娱乐app下载地址Symfony控制台制作:认证
Выберите1
длясозданияаутентификаторасформойвхода,назовитеклассаутентификатора-AppAuthenticator
, конт оллер -SecurityController
иответьте是的
,чтобыдобавитьмаршрутдлявыходаизсистемыпопути/注销
.
Длясвязываниявновьсозданныхклассов,командаобновитнастройкибезопасности:
12 3 4 5 6 7 8 9 10 11 12 13 14
——/ config /包/ security.yaml+ + + b / config /包/ security.yaml@@ -17,6 +17,11 @@ security: main: lazy: true provider: app_user_provider+ custom_authenticator: App\Security\AppAuthenticator+注销:+ path: app_logout注销后重定向的位置+ #目标:app_any_route#激活不同的身份验证方式# //www.oldmanjams.com/doc/current/securi欧宝娱乐app下载地址ty.html#the-firewall
Благодаряподсказкевовремявыполнениякоманды,дляперенаправленияпользователявслучаеуспешноговхода,намтакженеобходимоизменитьмаршрутвметодеonAuthenticationSuccess ()
:
12 3 4 5 6 7 8 9 10 11 12 13
——/ src /安全/ AppAuthenticator.php+ + + b / src /安全/ AppAuthenticator.php@@类AppAuthenticator扩展AbstractLoginFormAuthenticator返回新的重定向响应($targetPath);}- //例如:- //返回新的重定向响应($this->urlGenerator->generate('some_route'));-抛出新的\Exception('TODO:提供一个有效的重定向内部'.__FILE__);+返回新的重定向响应($this->urlGenerator->generate('admin'));} protected函数getLoginUrl(请求$ Request):字符串
提示
Откуда зна а, т том к易admin вл етс管理
(кото о о з за н в应用程序控制器\ \ Admin \ DashboardController
)?Нет,。Егоможноузнатьизфайлакласса,нолучшевыполнитьследующуюкоманду、котораяотобразитвсеимеющиесямаршрутывместесихпутями:
1
$欧宝娱乐app下载地址Symfony控制台调试:路由器
Добавлениеправилконтролядоступадляавторизации
Система безопа асност тоит из д у у у ост тоит:аутентификацияиавторизация.При создании а а ани с ст а а а оба а а а оба а ил ли ему рол иROLE_ADMIN
.Чтобы о ан ани и и ит доступ к о а делу/管理
толькодляпользователейимеющихэтуроль,необходимодобавитьправиловaccess_control
:
1 2 3 4 5 6 7 8 9 10 11
——/ config /包/ security.yaml+ + + b / config /包/ security.yaml@@ -31,7 +31,7 @@ security: #控制站点大区域访问的简单方法#注意:只有匹配的*第一个*访问控制将被使用access_control:- # - {path: ^/admin, roles: ROLE_ADMIN}+ - {path: ^/admin, roles: ROLE_ADMIN}# - {path: ^/profile, roles: ROLE_USER} when@test:
Правилаaccess_control
ограничиваютдоступспомощьюрегулярныхвыражений。При переходе по р ре есу, кото ор на и инаетс и/管理
, система езопа а а а а а а ас а асност т ст ти и и н нали и ист ол лROLE_ADMIN
у а о то о изо ованно о ол ол зовател。
Аутентификация через форму входа
Теперьприоткрытииадминистративнойпанеливыавтоматическиокажетесьнастраницевхода,гдевамбудетпредложеноввестилогинипароль:
Войдите в сис стему, испол зу ол о и и管理
инезашифрованныйпароль,которыйбылзахешированвамиранее。ЕсливыкорректноскопировалимоюSQL -команду,топарольбудет管理
.
Обратитевнимание,чтоEasyAdminавтоматическираспознаетсистемуаутентификацииSymfony:欧宝娱乐app下载地址
Попробуйте нажать на сс с лку“退出”。Всёготово!Теперьувасестьполностьюзащищённаяадминистративнаяпанель。
请注意
Есливыхотитесоздатьполноценнуюсистемуаутентификациисиспользованиемформы,используйтекоманду:注册表单
.
Двигаемсядальше