Php 使用Symfony2中的2个不同表登录
我使用的是Symfony 2.4.3。我尝试了许多教程中的几种方法,但仍然无法使此登录正常工作。我的登录页面有两个不同的表Php 使用Symfony2中的2个不同表登录,php,symfony,Php,Symfony,我使用的是Symfony 2.4.3。我尝试了许多教程中的几种方法,但仍然无法使此登录正常工作。我的登录页面有两个不同的表mst\u pelajar用于ROLE\u用户以nis字段作为用户名,而mst\u pegawai用于ROLE\u ADMIN以na字段作为用户名 我可以在内存中设置用户名和密码定义。我试图通过先在数据库中插入纯文本来使这个登录系统工作。此设置导致错误凭据错误 这是我的安全。yml: security: encoders: #Symfony\Compo
mst\u pelajar
用于ROLE\u用户
以nis
字段作为用户名,而mst\u pegawai
用于ROLE\u ADMIN
以na
字段作为用户名
我可以在内存中设置用户名和密码定义。我试图通过先在数据库中插入纯文本来使这个登录系统工作。此设置导致错误凭据错误
这是我的安全。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);
}
}
<?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 }