• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Symfony 5.4 SecurityBundle, nie można sie zalogować po rejestacji.

VPS Starter Arubacloud
0 głosów
159 wizyt
pytanie zadane 24 lutego 2022 w PHP przez Piotr Zakrzewski Obywatel (1,260 p.)

Zbudowalem pusty projekt Symfony w wersji 5.4 wg dokumentacji,  nizej wrzucam komendy jakie odpalam do wygenerowania projektu

composer create-project symfony/skeleton:"^5.4" testapp54 &&
cd testapp54 &&
composer require webapp &&
composer require symfony/apache-pack &&
composer require symfonycasts/verify-email-bundle &&
composer require symfony/security-bundle &&
composer require symfonycasts/reset-password-bundle &&
php bin/console make:controller MainController &&
php bin/console make:user &&
php bin/console make:auth &&
php bin/console make:registration &&
php bin/console make:reset-password &&
php bin/console make:migration &&
php bin/console doctrine:migrations:migrate

Po instalacji i konfiguracji, przechodzę do rejestracji, rejestruje usera, widze ze trafia do bazy,

przy konfiguracji wybieram opcje 'Do you want to automatically authenticate the user after registration? (yes/no) [yes]:' na Yes, po rejestracji automatycznie użytkownik się loguje. Lecz gdy się wyloguje i próbuje si zalogowań przez formularz logowania nic się kompletnie nie dzieje. Nawet gdy wrzucam złe dane to nie wywala błędów

enter image description here

2 odpowiedzi

0 głosów
odpowiedź 24 lutego 2022 przez Bosswell Nałogowiec (36,470 p.)

Sprawdź czy w pliku

config/packages/security.yaml

Odpowiednio skonfigurowałeś firewall

firewalls:
        main:
            # ...
            form_login:
                # "login" is the name of the route created previously
                login_path: login
                check_path: login
komentarz 25 lutego 2022 przez Piotr Zakrzewski Obywatel (1,260 p.)
edycja 25 lutego 2022 przez Piotr Zakrzewski

Nie mam tego kawałka kodu który wkleiłeś,

Mam starsze wersje projektów gdzie logowanie działa, zerkam w ten config.yml i mam prawie 1 = 1 jak w 5.4.4 wersji,

5.4.4:

security:
    enable_authenticator_manager: true
    # https://symfony.com/doc/current/security.html#registering-the-user-hashing-passwords
    password_hashers:
        Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto'
        App\Entity\User:
            algorithm: auto

    # https://symfony.com/doc/current/security.html#loading-the-user-the-user-provider
    providers:
        # used to reload user from session & other features (e.g. switch_user)
        app_user_provider:
            entity:
                class: App\Entity\User
                property: email
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            lazy: true
            provider: app_user_provider
            custom_authenticator: App\Security\AppAuthenticator
            logout:
                path: app_logout
                # where to redirect after logout
                # target: app_any_route

            # activate different ways to authenticate
            # https://symfony.com/doc/current/security.html#the-firewall

            # https://symfony.com/doc/current/security/impersonating_user.html
            # switch_user: true

    # 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: ^/admin, roles: ROLE_ADMIN }
        # - { path: ^/profile, roles: ROLE_USER }

when@test:
    security:
        password_hashers:
            # By default, password hashers are resource intensive and take time. This is
            # important to generate secure password hashes. In tests however, secure hashes
            # are not important, waste resources and increase test times. The following
            # reduces the work factor to the lowest possible values.
            Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface:
                algorithm: auto
                cost: 4 # Lowest possible value for bcrypt
                time_cost: 3 # Lowest possible value for argon
                memory_cost: 10 # Lowest possible value for argon

 

5.4.2: (tutaj rejestracja i logowanie działą prawidłowo)

security:
    encoders:
        App\Entity\User:
            algorithm: auto

    # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
    providers:
        # used to reload user from session & other features (e.g. switch_user)
        app_user_provider:
            entity:
                class: App\Entity\User
                property: username
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            anonymous: true
            lazy: true
            provider: app_user_provider
            guard:
                authenticators:
                    - App\Security\AppAuthenticator
            logout:
                path: app_logout
                # where to redirect after logout
                # target: app_any_route

            # activate different ways to authenticate
            # https://symfony.com/doc/current/security.html#firewalls-authentication

            # https://symfony.com/doc/current/security/impersonating_user.html
            # switch_user: true

    # 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: ^/admin, roles: ROLE_ADMIN }
        # - { path: ^/profile, roles: ROLE_USER }

EDIT, cofnalem sie do wersji 5.4.3 oraz 5.4.0 niestety objawy sa identyczne,... na starych projektach podciagnietych do wersji 5.4.* logowanie dziala, na nowych projektach juz nie :/

0 głosów
odpowiedź 25 lutego 2022 przez Piotr Zakrzewski Obywatel (1,260 p.)

Problem rozwiazany !

Nalezy wprowadzic taka zmiane w : app\vendor\symfony\security-http\Authenticator\AbstractLoginFormAuthenticator.php

    public function supports(Request $request): bool

    {

        //return $request->isMethod('POST') && $this->getLoginUrl($request) === $request->getPathInfo();

        return self::LOGIN_ROUTE === $request->attributes->get('_route') && $request->isMethod('POST');

    }

 

komentarz 25 lutego 2022 przez Ehlert Ekspert (213,530 p.)
Paczek które instalujesz nie powinno się modyfikować.
komentarz 26 lutego 2022 przez Piotr Zakrzewski Obywatel (1,260 p.)
W takim razie podrzuć lepsze , działające rozwiązanie.
komentarz 26 lutego 2022 przez Ehlert Ekspert (213,530 p.)
Dawno nie siedziałem w Symfony, ale dokumentacja wyjaśnia wszystko. Jeśli nie jesteś logowany, to możliwe że w logach będzie o tym informacja. Może firewall nie wie, że chcesz się zalogować na tej akcji?

Plików z vendor nie powinno się ani wersjonować, ani modyfikować.

Podobne pytania

0 głosów
1 odpowiedź 158 wizyt
0 głosów
1 odpowiedź 204 wizyt
0 głosów
1 odpowiedź 243 wizyt

92,843 zapytań

141,782 odpowiedzi

320,858 komentarzy

62,174 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...