Как пройти аутентификацию в Symfony2, используя две разные таблицы - PullRequest
3 голосов
/ 13 октября 2011

У меня есть две таблицы в этом проекте. Одна таблица предназначена для администратора сайта, который хранит все данные пользователей-администраторов, а другая таблица хранит все данные для входа клиентов на сайт.

В данный момент я могу войти в систему, используя данные администратора. Тем не менее, я сейчас пытаюсь войти в систему с данными клиента, и это не похоже на работу. Пока пользователь нажимает на ссылку, он переходит в / clientarea / login. Эта страница загружается нормально. Но когда я пытаюсь войти в систему, я получаю сообщение об ошибке.

Я получаю следующую ошибку:

Невозможно найти контроллер для пути "/ clientarea / login_check". Может быть, вы забыли добавить соответствующий маршрут в конфигурацию маршрутизации?

В моем файле security.yml у меня есть следующий код: (Кстати, я использую открытый текст только для разработки, он будет изменен при запуске):

providers:
    admin_db:
        entity: { class: Shout\AdminBundle\Entity\User, property: username }
    client_db:
        entity: { class: Shout\AdminBundle\Entity\Userclients, property: username }

encoders:
    Shout\AdminBundle\Entity\User: 
        algorithm: plaintext 
    Shout\AdminBundle\Entity\Userclients: 
        algorithm: plaintext 

firewalls:
    secured_area:
        pattern: ^/
        anonymous: ~
        provider: admin_db
        form_login:
            check_path: /login_check
            login_path: /login
        logout:
            path:   /logout
            target: /index
    client_area:
        pattern: ^/
        anonymous: ~
        provider: client_db
        form_login:
            check_path: /clientarea/login_check
            login_path: /clientarea/login
        logout:
            path:   /clientarea/logout
            target: /index

access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin, roles: ROLE_ADMIN }
    - { path: ^/clientarea/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/clientarea, roles: ROLE_USER }

В моем routing.yml у меня есть этот код:

login:
    pattern:   /login
    defaults:  { _controller: ShoutAdminBundle:Security:login }

    login_check:
        pattern:   /login_check

    logout:
        pattern:   /logout

    clientlogin:
        pattern:   /clientarea/login
        defaults:  { _controller: ShoutAdminBundle:Security:clientlogin }

    clientlogin_check:
        pattern:   /clientarea/login_check

    clientlogout:
        pattern:   /clientarea/logout

Вот код в контроллере. Код идентичен для функций входа в систему и clientlogin, отличается только файл ветки, на который они указывают:

$request = $this->getRequest();
$session = $request->getSession();

// get the login error if there is one
if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
    $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
} else {
    $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
}

return $this->render('ShoutAdminBundle:Security:clientlogin.html.twig', array(
    // last username entered by the user
    'last_username' => $session->get(SecurityContext::LAST_USERNAME),
    'error'         => $error,
));

Путь действия формы входа клиента указывает на clientlogin_check.

Что я делаю не так?

1 Ответ

2 голосов
/ 14 октября 2011

Мне удалось заставить его работать, но самым простым способом. У меня нет времени из-за крайнего срока, чтобы сделать страницы входа красивыми.

Но вот код:

    client_area:
        pattern: ^/clientarea
        anonymous: ~
        provider: client_db
        http_basic:
            realm: "Secured Client Area"

В принципе, вы можете иметь пользователей из более чем одной таблицы. Тем не менее, я до сих пор не могу заставить его работать, используя правильную форму входа. Но основное окно входа в систему HTTP работает так же хорошо, что я делаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...