के बजाय ईमेल का उपयोग कर सिम्फनी 2 प्रमाणीकरण/लॉगिन लॉगिन मैं आज सिम्फनी 2 का उपयोग करके एक लॉगिन फॉर्म बनाने की कोशिश कर रहा हूं जहां कोई उपयोगकर्ता अपने ईमेल पते और पासवर्ड का उपयोग करके लॉगिन कर सकता है। मेरे पास बहुत सारी समस्याएं हैं और अंत में यह एहसास हुआ कि यह केवल तभी काम करेगा जब मेरे संपत्ति AdminUser
इकाई वर्ग में हो। मैंने उपयोगकर्ता नाम के बजाय ईमेल का उपयोग करने की कोशिश की है, जहां कोई संभव हो तो कृपया बताएं कि $username
क्यों आवश्यक है या मैं गलत कहां गया हूं? इसके अलावा, मेरे login.html.twig
फ़ाइल में मैं अभी भी _email
के बजाय _username
का उपयोग कर रहा हूं यदि इससे कोई फर्क पड़ता है?उपयोगकर्ता नाम
AdminUser इकाई:
namespace XXX\WebsiteBundle\Entity;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping as ORM;
/**
* AdminUser
*
* @ORM\Table(name="admin_user",indexes={@ORM\Index(name="indexes", columns={"deleted"})})
* @ORM\Entity
* @ORM\HasLifecycleCallbacks()
*/
class AdminUser implements UserInterface
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=45)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="email", type="string", length=45, unique=true)
*/
private $email;
/**
* @var string
*
* @ORM\Column(name="salt", type="string", length=255)
*/
private $salt;
/**
* @var string
*
* @ORM\Column(name="password", type="string", length=255)
*/
private $password;
/**
* @var integer
*
* @ORM\Column(name="enabled", type="integer", options={"default" = 0})
*/
private $enabled;
/**
* @var string[] $roles
*
* @ORM\Column(name="roles", type="array")
*/
private $roles = array();
private $username;
/**
* Gets the username.
*
* @return string The username.
*/
public function getUsername()
{
return $this->email;
}
/**
* Erases the user credentials.
*/
public function eraseCredentials()
{
}
/**
* Returns the roles granted to the user.
*
* <code>
* public function getRoles()
* {
* return array('ROLE_USER');
* }
* </code>
*
* Alternatively, the roles might be stored on a ``roles`` property,
* and populated in any number of different ways when the user object
* is created.
*
* @return Role[] The user roles
*/
public function getRoles() {
return $this -> roles;
}
/**
* Set the roles of the user
*
* @var string[] $roles
*
* @return \XXX\WebsiteBundle\Entity\User this
*/
public function setRoles(array $roles) {
$this -> roles = $roles;
return $this;
}
}
मेरे security.yml
फ़ाइल है:
jms_security_extra: secure_all_services (मैं कुछ getters और setters जो लागू नहीं हैं हटा दिया है) मेरी कोड के नीचे है: झूठी अभिव्यक्ति: सत्य
security:
encoders:
XXX\WebsiteBundle\Entity\AdminUser: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
main_provider:
entity: { class: XXX\WebsiteBundle\Entity\AdminUser, property: email }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
admin_firewall:
pattern: ^/admin.*
anonymous: ~
form_login:
login_path: /admin/login
check_path: /admin/login_check
access_control:
- { path: ^/admin/login.*, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin.*, roles: ROLE_ADMIN }
उपयोगकर्ता इंटरफ़ेस आवश्यकता को पूरा करने के लिए आपको AdminUser में getUsername() विधि प्राप्त करनी होगी। लेकिन यह आपके पास ईमेल लौटा सकता है जैसे आपके पास है। संपत्ति: ईमेल आपको बस इतना करना चाहिए। क्या हो रहा है यह सत्यापित करने के लिए आप EntityUserProvider क्लास में देख सकते हैं। शायद एक ताजा इंस्टॉलेशन के साथ शुरू करें? कभी-कभी मैं परेशानी शूटिंग करते समय गड़बड़ करता हूं। – Cerad