2014-01-16 2 views
1

UPDATE를 작동하지 않습니다
로그인 + Symfony2

는 AdvancedUserInterface하고 필요한 기능을 구현하도록 내 사용자 엔티티 업데이트되었습니다.

<?php 

namespace VolleyScout\VolleyScoutBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Security\Core\User\AdvancedUserInterface; 

/** 
* Users 
* 
* @ORM\Table(name="users", indexes={@ORM\Index(name="fk_users_roles1_idx", columns={"role_id"})}) 
* @ORM\Entity 
*/ 
class Users implements AdvancedUserInterface 
{ 
    /** 
    * @var string 
    * 
    * @ORM\Column(name="user_username", type="string", length=45, nullable=false) 
    */ 
    private $userUsername; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="user_firstname", type="string", length=45, nullable=false) 
    */ 
    private $userFirstname; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="user_surname", type="string", length=255, nullable=false) 
    */ 
    private $userSurname; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="user_email", type="string", length=255, nullable=false) 
    */ 
    private $userEmail; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="user_type", type="string", nullable=false) 
    */ 
    private $userType; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="user_password", type="string", length=60, nullable=false) 
    */ 
    private $userPassword; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="user_salt", type="string", length=30, nullable=false) 
    */ 
    private $userSalt; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="user_token", type="string", length=45, nullable=true) 
    */ 
    private $userToken; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="user_created", type="datetime", nullable=false) 
    */ 
    private $userCreated; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="user_modified", type="datetime", nullable=true) 
    */ 
    private $userModified = null; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="user_deleted", type="datetime", nullable=true) 
    */ 
    private $userDeleted = null; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="user_lastlogin", type="datetime", nullable=true) 
    */ 
    private $userLastlogin = null; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="user_confirmed", type="datetime", nullable=true) 
    */ 
    private $userConfirmed = null; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="user_locked", type="datetime", nullable=true) 
    */ 
    private $userLocked = null; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="user_id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $userId; 

    /** 
    * @var \VolleyScout\VolleyScoutBundle\Entity\Roles 
    * 
    * @ORM\ManyToOne(targetEntity="VolleyScout\VolleyScoutBundle\Entity\Roles") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="role_id", referencedColumnName="role_id") 
    * }) 
    */ 
    private $role; 

    /** 
    * @var \Doctrine\Common\Collections\Collection 
    * 
    * @ORM\ManyToMany(targetEntity="VolleyScout\VolleyScoutBundle\Entity\Teams", inversedBy="user") 
    * @ORM\JoinTable(name="user_follows_teams", 
    * joinColumns={ 
    *  @ORM\JoinColumn(name="user_id", referencedColumnName="user_id") 
    * }, 
    * inverseJoinColumns={ 
    *  @ORM\JoinColumn(name="team_id", referencedColumnName="team_id") 
    * } 
    *) 
    */ 
    private $team; 

    /** 
    * @var \Doctrine\Common\Collections\Collection 
    * 
    * @ORM\ManyToMany(targetEntity="VolleyScout\VolleyScoutBundle\Entity\Competitions", inversedBy="user") 
    * @ORM\JoinTable(name="user_follows_competitions", 
    * joinColumns={ 
    *  @ORM\JoinColumn(name="user_id", referencedColumnName="user_id") 
    * }, 
    * inverseJoinColumns={ 
    *  @ORM\JoinColumn(name="competition_id", referencedColumnName="competition_id") 
    * } 
    *) 
    */ 
    private $competition; 

    /** 
    * Constructor 
    */ 
    public function __construct() 
    { 
     $this->team = new \Doctrine\Common\Collections\ArrayCollection(); 
     $this->competition = new \Doctrine\Common\Collections\ArrayCollection(); 
     $this->userSalt = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36); 
    } 


    /** 
    * Set userUsername 
    * 
    * @param string $userUsername 
    * @return Users 
    */ 
    public function setUserUsername($userUsername) 
    { 
     $this->userUsername = $userUsername; 

     return $this; 
    } 

    /** 
    * Get userUsername 
    * 
    * @return string 
    */ 
    public function getUserUsername() 
    { 
     return $this->userUsername; 
    } 

    /** 
    * Set userFirstname 
    * 
    * @param string $userFirstname 
    * @return Users 
    */ 
    public function setUserFirstname($userFirstname) 
    { 
     $this->userFirstname = $userFirstname; 

     return $this; 
    } 

    /** 
    * Get userFirstname 
    * 
    * @return string 
    */ 
    public function getUserFirstname() 
    { 
     return $this->userFirstname; 
    } 

    /** 
    * Set userSurname 
    * 
    * @param string $userSurname 
    * @return Users 
    */ 
    public function setUserSurname($userSurname) 
    { 
     $this->userSurname = $userSurname; 

     return $this; 
    } 

    /** 
    * Get userSurname 
    * 
    * @return string 
    */ 
    public function getUserSurname() 
    { 
     return $this->userSurname; 
    } 

    /** 
    * Set userEmail 
    * 
    * @param string $userEmail 
    * @return Users 
    */ 
    public function setUserEmail($userEmail) 
    { 
     $this->userEmail = $userEmail; 

     return $this; 
    } 

    /** 
    * Get userEmail 
    * 
    * @return string 
    */ 
    public function getUserEmail() 
    { 
     return $this->userEmail; 
    } 

    /** 
    * Set userType 
    * 
    * @param string $userType 
    * @return Users 
    */ 
    public function setUserType($userType) 
    { 
     $this->userType = $userType; 

     return $this; 
    } 

    /** 
    * Get userType 
    * 
    * @return string 
    */ 
    public function getUserType() 
    { 
     return $this->userType; 
    } 

    /** 
    * Set userPassword 
    * 
    * @param string $userPassword 
    * @return Users 
    */ 
    public function setUserPassword($userPassword) 
    { 
     $this->userPassword = $userPassword; 

     return $this; 
    } 

    /** 
    * Get userPassword 
    * 
    * @return string 
    */ 
    public function getUserPassword() 
    { 
     return $this->userPassword; 
    } 

    /** 
    * Set userSalt 
    * 
    * @param string $userSalt 
    * @return Users 
    */ 
    public function setUserSalt($userSalt) 
    { 
     $this->userSalt = $userSalt; 

     return $this; 
    } 

    /** 
    * Get userSalt 
    * 
    * @return string 
    */ 
    public function getUserSalt() 
    { 
     return $this->userSalt; 
    } 

    /** 
    * Set userToken 
    * 
    * @param string $userToken 
    * @return Users 
    */ 
    public function setUserToken($userToken) 
    { 
     $this->userToken = $userToken; 

     return $this; 
    } 

    /** 
    * Get userToken 
    * 
    * @return string 
    */ 
    public function getUserToken() 
    { 
     return $this->userToken; 
    } 

    /** 
    * Set userCreated 
    * 
    * @param \DateTime $userCreated 
    * @return Users 
    */ 
    public function setUserCreated($userCreated) 
    { 
     $this->userCreated = $userCreated; 

     return $this; 
    } 

    /** 
    * Get userCreated 
    * 
    * @return \DateTime 
    */ 
    public function getUserCreated() 
    { 
     return $this->userCreated; 
    } 

    /** 
    * Set userModified 
    * 
    * @param \DateTime $userModified 
    * @return Users 
    */ 
    public function setUserModified($userModified) 
    { 
     $this->userModified = $userModified; 

     return $this; 
    } 

    /** 
    * Get userModified 
    * 
    * @return \DateTime 
    */ 
    public function getUserModified() 
    { 
     return $this->userModified; 
    } 

    /** 
    * Set userDeleted 
    * 
    * @param \DateTime $userDeleted 
    * @return Users 
    */ 
    public function setUserDeleted($userDeleted) 
    { 
     $this->userDeleted = $userDeleted; 

     return $this; 
    } 

    /** 
    * Get userDeleted 
    * 
    * @return \DateTime 
    */ 
    public function getUserDeleted() 
    { 
     return $this->userDeleted; 
    } 

    /** 
    * Set userLastlogin 
    * 
    * @param \DateTime $userLastlogin 
    * @return Users 
    */ 
    public function setUserLastlogin($userLastlogin) 
    { 
     $this->userLastlogin = $userLastlogin; 

     return $this; 
    } 

    /** 
    * Get userLastlogin 
    * 
    * @return \DateTime 
    */ 
    public function getUserLastlogin() 
    { 
     return $this->userLastlogin; 
    } 

    /** 
    * Set userConfirmed 
    * 
    * @param \DateTime $userConfirmed 
    * @return Users 
    */ 
    public function setUserConfirmed($userConfirmed) 
    { 
     $this->userConfirmed = $userConfirmed; 

     return $this; 
    } 

    /** 
    * Get userConfirmed 
    * 
    * @return \DateTime 
    */ 
    public function getUserConfirmed() 
    { 
     return $this->userConfirmed; 
    } 

    /** 
    * Set userLocked 
    * 
    * @param \DateTime $userLocked 
    * @return Users 
    */ 
    public function setUserLocked($userLocked) 
    { 
     $this->userLocked = $userLocked; 

     return $this; 
    } 

    /** 
    * Get userLocked 
    * 
    * @return \DateTime 
    */ 
    public function getUserLocked() 
    { 
     return $this->userLocked; 
    } 

    /** 
    * Get userId 
    * 
    * @return integer 
    */ 
    public function getUserId() 
    { 
     return $this->userId; 
    } 

    /** 
    * Set role 
    * 
    * @param \VolleyScout\VolleyScoutBundle\Entity\Roles $role 
    * @return Users 
    */ 
    public function setRole(\VolleyScout\VolleyScoutBundle\Entity\Roles $role = null) 
    { 
     $this->role = $role; 

     return $this; 
    } 

    /** 
    * Get role 
    * 
    * @return \VolleyScout\VolleyScoutBundle\Entity\Roles 
    */ 
    public function getRole() 
    { 
     return $this->role; 
    } 

    /** 
    * Add team 
    * 
    * @param \VolleyScout\VolleyScoutBundle\Entity\Teams $team 
    * @return Users 
    */ 
    public function addTeam(\VolleyScout\VolleyScoutBundle\Entity\Teams $team) 
    { 
     $this->team[] = $team; 

     return $this; 
    } 

    /** 
    * Remove team 
    * 
    * @param \VolleyScout\VolleyScoutBundle\Entity\Teams $team 
    */ 
    public function removeTeam(\VolleyScout\VolleyScoutBundle\Entity\Teams $team) 
    { 
     $this->team->removeElement($team); 
    } 

    /** 
    * Get team 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getTeam() 
    { 
     return $this->team; 
    } 

    /** 
    * Add competition 
    * 
    * @param \VolleyScout\VolleyScoutBundle\Entity\Competitions $competition 
    * @return Users 
    */ 
    public function addCompetition(\VolleyScout\VolleyScoutBundle\Entity\Competitions $competition) 
    { 
     $this->competition[] = $competition; 

     return $this; 
    } 

    /** 
    * Remove competition 
    * 
    * @param \VolleyScout\VolleyScoutBundle\Entity\Competitions $competition 
    */ 
    public function removeCompetition(\VolleyScout\VolleyScoutBundle\Entity\Competitions $competition) 
    { 
     $this->competition->removeElement($competition); 
    } 

    /** 
    * Get competition 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getCompetition() 
    { 
     return $this->competition; 
    } 

    private $player; 

    /** 
    * Get player 
    * 
    * @return \VolleyScout\VolleyScoutBundle\Entity\Players 
    */ 

    public function getPlayer() { 
     return $this->player; 
    } 
    /** 
    * Set player 
    * 
    * @param \VolleyScout\VolleyScoutBundle\Entity\Players $player 
    * @return Users 
    */ 
    public function setPlayer(\VolleyScout\VolleyScoutBundle\Entity\Players $player = null){ 
     $this->player = $player; 

     return $this; 
    } 


    public function getUsername() 
    { 
     return $this->userUsername; 
    } 

    public function getSalt() 
    { 
     return $this->userSalt; 
    } 

    public function getPassword() 
    { 
     return $this->userPassword; 
    } 


    public function eraseCredentials() 
    { 
     // Do nothing. 
    } 

    /** 
    * Implementation of UserInterface method 
    * 
    * @return array Roles 
    */ 
    public function getRoles() 
    { 
     return ['ROLE_USER']; 
    } 


    /** 
    * Implementation of AdvancedUserInterface method 
    * 
    * @return boolean 
    */ 
    public function isAccountNonExpired() 
    { 
     return true; 
    } 

    /** 
    * Implementation of AdvancedUserInterface method 
    * 
    * @return boolean 
    */ 
    public function isAccountNonLocked() 
    { 
     return true; 
    } 

    /** 
    * Implementation of AdvancedUserInterface method 
    * 
    * @return boolean 
    */ 
    public function isCredentialsNonExpired() 
    { 
     return true; 
    } 

    /** 
    * Implementation of AdvancedUserInterface method 
    * 
    * @return boolean 
    */ 
    public function isEnabled() 
    { 
     // CHECK IF $this->confirmed is not null 
     return true; 
    } 
} 

아직 로그인 할 수 없습니다. 아직 항목이 누락 되었습니까?
내 로그인보기 :

{% extends "::securitybase.html.twig" %} 

{% block title %}Login | {{ parent() }}{% endblock %} 

{% block body %} 
    {% set class_error = ' has-error alert alert-warning' %} 
    <h1 class="col-sm-offset-3 col-sm-9">Please sign on</h1> 
    {% if loginError %} 
     <div class="alert alert-warning">{{ loginError.message }}</div> 
    {% endif %} 
    {{ form_errors(loginForm) }} 
    {{ form_start(loginForm, {"attr": {"class": "form-horizontal"} }) }} 
    <div class="form-group{{ loginForm.userUsername.vars.valid ? '' : class_error }}"> 
     {{ form_label(loginForm.userUsername, label|default(), 
     { "label_attr": { "class": "col-sm-3 control-label"}}) }} 
     <div class="col-sm-9"> 
      <div class="input-group"> 
       <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span> 
       {{ form_widget(loginForm.userUsername, 
       {"attr": {"class": "form-control" } }) }} 
      </div> 
     </div> 
     {% if not loginForm.userUsername.vars.valid %} 
      <div class="col-sm-offset-3 col-sm-9"> 
       <h5><i class="glyphicon glyphicon-warning-sign"></i> <strong>Please fix:</strong></h5> 
       {{ form_errors(loginForm.userUsername) }} 
      </div> 
     {% endif %} 
    </div> 
    <div class="form-group{{ loginForm.userPassword.vars.valid ? '' : class_error }}"> 
     {{ form_label(loginForm.userPassword, label|default(), 
     { "label_attr": { "class": "col-sm-3 control-label"}}) }} 
     <div class="col-sm-9"> 
      <div class="input-group"> 
       <span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span> 
       {{ form_widget(loginForm.userPassword, 
       {"attr": {"class": "form-control" } }) }} 
      </div> 
     </div> 
     {% if not loginForm.userPassword.vars.valid %} 
      <div class="col-sm-offset-3 col-sm-9"> 
       <h5><i class="glyphicon glyphicon-warning-sign"></i> <strong>Please fix:</strong></h5> 
       {{ form_errors(userPassword.userUsername) }} 
      </div> 
     {% endif %} 
    </div> 
    <div class="form-group"> 
     <div class="col-sm-offset-3 col-sm-9"> 
      <div class="checkbox"> 
       <input type="checkbox" id="remember" name="remember" checked> 
       <label for="remember">Remember me</label> 
      </div> 
     </div> 
    </div> 
    <div class="form-group"> 
     <div class="col-sm-offset-3 col-sm-9"> 
      {{ form_widget(loginForm.btn_login, 
      {"attr": {"class": "btn btn-primary"} }) }} 
      <a href="{{ path('volley_scout_registerpage') }}" class="btn btn-link">Register</a> 
     </div> 
    </div> 
    {{ form_end(loginForm) }} 
{% endblock %} 

내 loginAction :

public function loginAction(Request $request) 
{ 
    // New user 
    $user = new Users(); 

    $form = $this->createForm(new LoginType(), $user); 

    if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) { 
     $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR); 
    } else { 
     $session = $request->getSession(); 
     $error = $session->get(SecurityContext::AUTHENTICATION_ERROR); 
     $session->remove(SecurityContext::AUTHENTICATION_ERROR); 
    } 

    return $this->render('VolleyScoutBundle:User:login.html.twig', array(
     'loginForm' => $form->createView(), 
     'loginError' => $error, 
    )); 
} 

내 security.yml :

security: 
    encoders: 
     VolleyScout\VolleyScoutBundle\Entity\Users: 
      algorithm: bcrypt 
      cost: 15 

    role_hierarchy: 
     ROLE_ADMIN:  [ROLE_USER] 

    providers: 
     members: 
      entity: 
       class: VolleyScoutBundle:Users 
       property: userUsername 

    firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 
     main: 
      pattern: ^/ 
      anonymous: true 
     secured_area: 
      pattern: ^/ 
      anonymous: ~ 
      form_login: 
       login_path: volley_scout_loginpage 
       check_path: volley_scout_logincheck 
       username_parameter: login[username] 
       password_parameter: login[password] 
       always_use_default_target_path: true 
       default_target_path: volley_scout_homepage 
      logout: 
       path: volley_scout_logout 
       target: volley_scout_loginpage 
      remember_me: 
       key:  "%secret%" 
       lifetime: 31536000 # 365 days in seconds 
       path: /
       domain: ~ # Defaults to the current domain from $_SERVER 
       remember_me_parameter: remember 

    access_control: 
     - { path: /_wdt/.*, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: /_profiler/.*, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: /login, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: /register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: /admin, roles: ROLE_ADMIN } 
     - { path: /.*, role: IS_AUTHENTICATED_FULLY } 

업데이트 2 :
내가 확인 내 dev.log 파일 다음 오류가 발생합니다.

내가 로그인을 시도 할 때마다

[2014-01-17 18:20:46] event.DEBUG: Notified event "kernel.terminate" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelTerminate". [] [] 
...

+0

[Entity Provider documentation] (http://symfony.com/doc/current/cookbook/security/entity_provider.html)을 보길 권한다. 'UserInterface'는 사용자를 구현하는 데 도움이된다. 수업. 'Entity'는 종종 단수 명사에 의해 호출됩니다. 당신은 많은 사용자를 가졌지 만, 각각이'User'의 인스턴스입니다. 제 생각에는 단수 명사로 각 엔티티를 생각하는 것이 더 쉽습니다. –

+2

기본 문제는 사용자 객체가 내장 된 로그인 검사기가 실행되지 않는다는 것을 의미하는 사용자 인터페이스를 구현하지 않는다는 것입니다. 보안 시스템은 Symfony의 더욱 어려운 번들 중 하나입니다. 새로운 심포니 프로젝트를 만든 다음 보안 장의 단계를 따르고 자신을 작동 시스템으로 만들 것을 제안합니다. 일단 모든 피스가 어떻게 조화를 이루 었는지 명확히 알게되면 사용자 정의 사용자를 만들 수 있습니다. – Cerad

+0

로그인보기를 추가 할 수 있습니까? – np87

답변

1

@ Kerad가 언급 한 바로는 문제는 UserInterface 또는 AdvancedUserInterface을 구현하지 않습니다. 문서 How To load users from the database을 살펴보고이 작업을 수행하는 방법에 대한 몇 가지 예를 제공합니다. AdvancedUserInterface을 구현하면 데이터베이스에 roles을 관리하고 '활성'이 아닌 사용자를 잠그는 등의 멋진 기능이나 기타 유용한 기능을 사용할 수도 있습니다. 기사를 살펴보고 대답을 줄 것이라고 확신합니다.

사용자 클래스에 필요한 getters을 추가했는지 확인하십시오. 당신이 위의 모든과 필요의 AdvancedUserInterface를 들어

getRoles() 
getPassword() 
getSalt() 
getUsername() 
eraseCredentials() 

또한

isAccountNonExpired() 
isAccountNonLocked() 
isCredentialsNonExpired() 
isEnabled() 
+0

도움을 주셔서 감사합니다. 그러나 아직 로그인하지 않았습니다. 시작 게시물을 업데이트했습니다. 아마도 약간의 실수가있을 것입니다. – nielsv

+0

사용자 이름과 암호 필드 이름이 문제 일 수 있다고 생각합니다. 당신은'login [username]'을 단지'username'으로 바꾸고 패스워드도 똑같이 바꿀 수 있다고 생각하십니까? – Sehael

+0

내 dev.log를 확인한 결과 로그인 할 때 항상 오류가 발생합니다. 그것을 고치는 방법을 알고 있습니까? – nielsv

1

https://github.com/FriendsOfSymfony/FOSUserBundle를 사용하려고하십시오 - 당신이 시간 이상의 몇 가지를 저장하는 데 도움이됩니다. 이것은 사용자 등록, 로그인 및 관리를위한 신뢰할 수있는 번들입니다. 또한 보안 변경, 이메일 전송 또는 암호 변경을 제공합니다.

많은 프로젝트에서 도움이됩니다.

0

CSRF 보호 토큰 디스플레이는 로그인보기에 잘합니까 다음 UserInterface를 들어

, 이러한 기능이 필요하십니까?

당신은 경우가 아니라면 양식 내부 어딘가에

{{ form_rest(loginForm) }} 

를 추가 할 수 있습니다.

+0

도움을 주셔서 감사합니다.하지만 아직 로그인하지 않았습니다. 시작 게시물을 업데이트했습니다. 아마도 약간의 실수가있을 것입니다. – nielsv

관련 문제