Im использует Symfony2.4.3. Я попробовал несколько методов из многих учебных пособий, но все же не могу заставить этот логин работать. Для моей учетной записи есть две разные таблицы. mst_pelajar
для ROLE_USER
с именем mst_pegawai
качестве имени пользователя и mst_pegawai
для ROLE_ADMIN
с ROLE_ADMIN
na
качестве имени пользователя. Я могу заставить его работать для in_memory
имени пользователя и пароля in_memory
. Я пытаюсь сделать эту систему входа в систему, сначала вставляя простой текст в базу данных. Я получаю bad credentials
запись с этими настройками.
Вот мой security.yml:
security: encoders: #Symfony\Component\Security\Core\User\User: plaintext Sifo\AdminBundle\Entity\MstPelajar: plaintext Sifo\AdminBundle\Entity\MstPegawai: plaintext role_hierarchy: #ROLE_ADMIN: ROLE_USER #ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] providers: #in_memory: # memory: # users: # user: { password: userpass, roles: [ 'ROLE_USER' ] } # admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] } admin_area: entity: { class: SifoAdminBundle:MstPegawai, property: na } user_area: entity: { class: SifoAdminBundle:MstPelajar, property: nis } firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false anonymous: true alogin: pattern: ^/admin/login$ security: false anonymous: true ulogin: pattern: ^/user/login$ security: false anonymous: true admin_area: pattern: ^/admin anonymous: false form_login: check_path: /admin/login_check login_path: /admin/login logout: path: /admin/logout target: /admin user_area: pattern: ^/user anonymous: false form_login: check_path: /user/login_check login_path: /user/login logout: path: /user/logout target: /user access_control: - { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/admin/, roles: ROLE_ADMIN } - { path: ^/user/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/user/, roles: ROLE_USER }
Объект для администратора:
<?php namespace Sifo\AdminBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Security\Core\User\UserInterface; /** * MstPelajar */ class MstPelajar implements UserInterface, \Serializable { /** * @var integer */ private $id; * @var string */ private $nis; /** * @var string */ private $password; /** * @var string */ private $salt; /** * @var boolean */ private $aktif; /** * @var \DateTime */ private $timestamp; /** * @var string */ private $operator; private $username; /** * Set id * * @param integer $id * @return MstPelajar */ public function setId($id) { $this->id = $id; return $this; } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set nis * * @param string $nis * @return MstPelajar */ public function setNis($nis) { $this->nis = $nis; return $this; } /** * Get nis * * @return string */ public function getNis() { return $this->nis; } /** * Set password * * @param string $password * @return MstPelajar */ public function setPassword($password) { $this->password = $password; return $this; } /** * Get password * * @return string */ public function getPassword() { return $this->password; } /** * Set salt * * @param string $salt * @return MstPelajar */ public function setSalt($salt) { $this->salt = $salt; return $this; } /** * Get salt * * @return string */ public function getSalt() { return $this->salt; } public function __construct() { $this->aktif = true; // may not be needed, see section on salt below // $this->salt = md5(uniqid(null, true)); } public function getUsername() { return $this->nis; } public function getRoles() { return array('ROLE_USER'); } public function eraseCredentials() { } public function serialize() { return serialize(array( $this->id, $this->nis, $this->password, // see section on salt below // $this->salt, )); } public function unserialize($serialized) { list ( $this->id, $this->nis, $this->password, // see section on salt below // $this->salt ) = unserialize($serialized); } }
Пользовательский объект почти такой же, как и с администратором, я сначала создам админ-логин после получения проблемы. Я просто показываю важную область наверху. Просто прокомментируйте, если потребуется другое поле.
Здесь мой DefaultController для администратора:
<?php namespace Sifo\AdminBundle\Controller; use Symfony\Component\HttpFoundation\Request; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\Security\Core\SecurityContext; use Symfony\Component\Security\Core\Exception\AccessDeniedException; use Sifo\AdminBundle\Form\DefaultType; class DefaultController extends Controller { public function indexAction() { return $this->render('SifoAdminBundle:Default:index.html.twig'); } public function loginAction() { $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); $session->remove(SecurityContext::AUTHENTICATION_ERROR); } return $this->render('SifoAdminBundle:Default:login.html.twig', array( // last username entered by the user 'last_username' => $session->get(SecurityContext::LAST_USERNAME), 'error' => $error, )); } }
Спасибо, если нужна другая информация, просто прокомментируйте или сообщите мне. Я действительно оценил вашу помощь.
Я просто исправляю свою проблему. Мне нужно добавить поставщика в брандмауэр. Это будет выглядеть так:
security: encoders: #Symfony\Component\Security\Core\User\User: plaintext Sifo\AdminBundle\Entity\MstPelajar: plaintext Sifo\AdminBundle\Entity\MstPegawai: plaintext role_hierarchy: #ROLE_ADMIN: ROLE_USER #ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] providers: #in_memory: # memory: # users: # user: { password: userpass, roles: [ 'ROLE_USER' ] } # admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] } admin_area: entity: { class: SifoAdminBundle:MstPegawai, property: na } user_area: entity: { class: SifoAdminBundle:MstPelajar, property: nis } firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false anonymous: true alogin: pattern: ^/admin/login$ security: false anonymous: true ulogin: pattern: ^/user/login$ security: false anonymous: true admin_area: pattern: ^/admin provider: admin_area anonymous: false form_login: check_path: /admin/login_check login_path: /admin/login logout: path: /admin/logout target: /admin user_area: pattern: ^/user provider: user_area anonymous: false form_login: check_path: /user/login_check login_path: /user/login logout: path: /user/logout target: /user access_control: - { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/admin/, roles: ROLE_ADMIN } - { path: ^/user/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/user/, roles: ROLE_USER }
Надежда может помочь кому-то с той же проблемой. Спасибо.