FOSUserBundle to pakiet służący do zarządzania użytkownikami i kontrolą ich uprawnień. Najczęściej wykorzystywany jest w CMS-ach (systemach zarządzania treścią). W skład pakietu wchodzą m.in.:
- logowanie,
- rejestracja,
- przypomnienie hasła,
- resetowanie hasła,
- dodawanie nowych użytkowników.
Poniżej przedstawię krok po kroku, w jaki sposób zainstalować i skonfigurować (w Symfony 4) pakiet FOSUserBundle.
1. INSTALACJA PAKIETU FOSUserBundle
1 |
$ composer require friendsofsymfony/user-bundle |
lub poprzez plik composer.phar:
1 |
$ php composer.phar require friendsofsymfony/user-bundle |
Jeśli na końcu instalacji otrzymasz taki wyjątek:
„The child node „db_driver” at path „fos_user” must be configured.
to nie przejmuj się, tzn., że pakiet nie jest jeszcze skonfigurowany. Tak czy siak, FOSUserBUndle jest zainstalowany 🙂
2. KONFIGURACJA
Tworzymy klasę User.php (src/Entity/User.php). Klasa dziedziczy wszystkie składowe z klasy bazowej BaseUser pakietu FOSUserBundle. Przyda nam się potem do wygenerowania tabeli user. Oczywiście, klasę tą możesz rozszerzyć o własne / dodatkowe pola, w zależności od potrzeb Twojej aplikacji.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?php # src/Entity/User.php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use FOS\UserBundle\Model\User as BaseUser; /** * @ORM\Entity * @ORM\Table(name="user") */ class User extends BaseUser { /** * @ORM\Id() * @ORM\GeneratedValue(strategy="AUTO") * @ORM\Column(type="integer") */ protected $id; public function getId() { return $this->id; } } ?> |
Aktualizujemy plik routes.yaml (/config/routes.yaml), w którym wskazujemy adres do trasowania.
1 2 |
fos_user: resource: "@FOSUserBundle/Resources/config/routing/all.xml" |
Jak widać importujemy i włączamy wszystkie (all.xml) pliki routingu. Możesz również sam zdecydować, które trasy włączyć / wyłączyć, korzystając z poszczególnych plików konfiguracji routingu. Szczegóły znajdziesz tutaj.
Dodaj do pliku framework.yaml (/config/packages/framework.yaml) renderowanie szablonów w PHP. Domyślnie Symfony korzysta z szablonów Twiga. Oczywiście możesz korzystać z dowolnego silnika.
1 2 3 |
framework: templating: engines: ['twig','php'] |
Edytuj zawartość pliku security.yaml (/config/packages/security.yaml) do postaci:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
security: encoders: App\Entity\User: bcrypt providers: fos_userbundle: id: fos_user.user_provider.username firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false main: anonymous: true logout: ~ form_login: csrf_token_generator: security.csrf.token_manager # activate different ways to authenticate # http_basic: true # https://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate # form_login: true # https://symfony.com/doc/current/security/form_login_setup.html # Easy way to control access for large sections of your site # Note: Only the *first* access control that matches will be used access_control: - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/admin/, role: ROLE_ADMIN } |
Jest to pewien standard, dlatego nie będziemy się w to zagłębiać 😉
W komentarzach masz linki do dokumentacji.
W kolejnym kroku, utwórz plik fos_user.yaml (/config/packages/fos_user.yaml) i skopiuj do niego zawartość:
1 2 3 4 5 6 7 |
fos_user: db_driver: orm firewall_name: main user_class: App\Entity\User from_email: address: "email@localhost" sender_name: "Sender Name" |
Na koniec zaktualizujemy bazę danych. W tym celu wywołaj z wiersza poleceń komendę, która wygeneruje tabelę user z klasy User.php:
1 |
$ php bin/console doctrine:schema:update --force |
Jeśli wszystko przeszło bez problemów to uruchom w przeglądarce internetowej strony z formularzami do logowania i rejestracji:
localhost:8000/public/index.php/login
localhost:8000/public/index.php/register
Skorzystaj z gotowego formularza i stwórz pierwszego użytkownika.
Symfony udostępnia również szereg poleceń do tworzenia użytkowników i ich ról: symfony.com/doc/2.0/bundles/FOSUserBundle/command_line_tools.html.
Poniższe polecenie utworzy użytkownika z nazwą username, hasłem: password i adresem e-mail: email@localhost.com:
1 |
$ php bin/console fos:user:create username email@localhost.com password |
Nadanie roli „administratora” (ROLE_ADMIN) użytkownikowi username jest równie proste:
1 |
$ php bin/console fos:user:promote username ROLE_ADMIN |
Więcej informacji o pakiecie FOSUserBUndle przeczytasz na oficjalnej stronie projektu Symfony: symfony.com/doc/current/bundles/FOSUserBundle/index.html
I to wszystko 😉
W kolejnym poście: NADPISYWANIE SZABLONÓW BUNDLI dowiesz się, w jaki sposób poprawić widok obskurnego logowania poprzez dodanie własnych stylów i atrybutów do znaczników formularza.