Проблема безопасности Symfony4 - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь создать простую форму входа для пользователей, созданных или зарегистрированных через веб-приложение.

Это мой файл security.yml

security:

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            pattern:    ^/
            http_basic: ~
            provider: our_db_provider
    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/, role: ROLE_ADMIN }

    encoders:
        App\Project\UserBundle\Entity\Users:
        algorithm: bcrypt

    providers:
        our_db_provider:
            entity:
                class: App\Project\UserBundle\Entity\Users:
                property: username

Если я захожу на страницу типа / nl/ admin / .. я могу зайти на страницу, даже если я не вошел в систему. Контроль доступа не работает?

Даже когда я пытаюсь войти в систему, я получил неверные учетные данные ... но учетные данные верны ..

это мой контроллер

namespace App\Project\UserBundle\Controller;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;

class LoginController extends Controller
{

    public function loginAction(Request $request, AuthenticationUtils $authenticationUtils)
    {

        // get the login error if there is one
        $error = $authenticationUtils->getLastAuthenticationError();

        // last username entered by the user
        $lastUsername = $authenticationUtils->getLastUsername();

        return $this->render('@ProjectUser/frontend/login/login.html.twig', array(
            'last_username' => $lastUsername,
            'error'         => $error,
        ));
    }
}

Что мне не хватает?

1 Ответ

0 голосов
/ 31 мая 2018

Вы должны «переэкспонировать» путь URI _locale в пути access_control, в зависимости от того, как они определены.Для двухбуквенных локалей вы можете написать access_control следующим образом:

access_control:
    - { path: ^/[a-z]{2}/admin/, role: ROLE_ADMIN }

или, если вы предпочитаете перечислить их, что-то вроде:

access_control:
    - { path: ^/(en|nl|de)/admin/, role: ROLE_ADMIN }

пути access_control - это строковые шаблоны,они не учитывают параметры маршрутизации ...

...