2014-01-16 10 views
1

UPDATE:
Логин не работает + Symfony2

Я обновил мои пользователи Entity так, что он реализует 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 } 

UPDATE 2:
Когда я проверяю мой dev.log файл Я получаю следующую ошибку:

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

Каждый раз, когда я пытаюсь войти ..

+0

Я предлагаю вам ознакомиться с [Документацией поставщика сущностей] (http://symfony.com/doc/current/cookbook/security/entity_provider.html), 'UserInterface' поможет вам реализовать« Пользователь » класс. Обратите внимание, что 'Entity' часто вызывается сингулярным существительным. У вас много пользователей, но каждый из них является экземпляром 'User', на мой взгляд, легче думать о каждой сущности уникальным существительным. –

+2

Ваша основная проблема заключается в том, что пользовательский объект не реализует пользовательский интерфейс, а это означает, что встроенная функция проверки входа не будет использоваться. Система безопасности является одним из наиболее сложных пакетов Symfony. Я бы предложил создать новый проект symfony, а затем выполнить шаги главы безопасности и получить рабочую систему. После того, как у вас есть четкое представление о том, как все фигуры подходят друг к другу, вы можете продолжить свой собственный пользователь. – Cerad

+0

Можете ли вы добавить вид входа? – np87

ответ

1

Проблема в том, что сказал @Cerad, вы не используете UserInterface или AdvancedUserInterface. Взгляните на документы How To load users from the database, и он даст вам несколько примеров того, как вы можете это сделать. Внедряя AdvancedUserInterface, вы также можете использовать другие интересные функции, такие как управление roles в базе данных, блокирование пользователей, которые не являются «активными», или другие интересные функции. Взгляните на статью, и я уверен, что она даст вам ответ.

use Symfony\Component\Security\Core\User\AdvancedUserInterface; 

class Users implements AdvancedUserInterface 
{ 
    //..... 
} 

Просто убедитесь, что вы добавили требуемый getters к вашему классу пользователей.

Для UserInterface, вам нужны эти функции:

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

Для AdvancedUserInterface, вам нужно все выше, а также

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

Спасибо за помощь, но я до сих пор не вошел в систему. Я обновил свой начальный пост. Вероятно, есть еще небольшая ошибка, не могли бы вы взглянуть на нее? – nielsv

+0

У меня также есть ощущение, что имена полей имени пользователя и пароля могут быть проблемой. вы думаете, что можете попробовать изменить 'login [имя_пользователя]' только на имя пользователя и пароль? – Sehael

+0

Я проверил свой dev.log и всегда получаю сообщение об ошибке при попытке входа в систему. Вы знаете, как это исправить? – nielsv

1

Попробуйте https://github.com/FriendsOfSymfony/FOSUserBundle - это поможет вам сэкономить пару часов или больше. Это надежный пакет для регистрации, регистрации и управления пользователями. Также вы можете изменить безопасность, отправить электронную почту или сменить пароль.

Это помогает мне во многих наших проектах.

0

ли маркер дисплей защита CSRF хорошо с вашей точки зрения входа в систему?

Вы можете попробовать добавить

{{ form_rest(loginForm) }} 

где-то внутри формы, если это не так.

+0

Спасибо за помощь, но я все еще не вошел в систему. Я обновил свой начальный пост. Вероятно, есть еще небольшая ошибка, не могли бы вы взглянуть на нее? – nielsv

Смежные вопросы