簡體   English   中英

避免登錄禁用的用戶Symfony2

[英]Avoid login for disabled users Symfony2

我需要在使用symfony2構建的Web應用程序中實現身份驗證系統。 無論如何,登錄和注銷操作均正常進行,但我無法避免禁用用戶的登錄。

這是我的security.yml:

security:
    encoders:
        Acme\MyBundle\Entity\User:
                algorithm: sha512
                encode-as-base64: true
                iterations: 10

    role_hierarchy:
        ROLE_ADMIN: [ROLE_USER, ROLE_DOCTOR]

    providers:
        user_db:
            entity: { class: Acme\MyBundle\Entity\User, property: username }

    firewalls:
        main:
            pattern: /.*
            provider: user_db
            form_login:
                login_path: /login
                check_path: /login_check
                remember_me: true
            logout:
                path: /logout
                target: /
            remember_me:
                key: MiPassphrase
                lifetime: 1800
                path: /.*
                domain: ~
            security: true
            anonymous: true
    access_control:
        - { path: /info, roles: ROLE_ADMIN }
        - { path: /login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: /.*, roles: IS_AUTHENTICATED_FULLY }

這是我的Entity / User.php文件:

<?php

namespace Acme\MyBundle\Entity;

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

/**
 * @ORM\Entity
 * @ORM\Table(name="Users")
 */
class User implements UserInterface
{

// Definizione campi

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", unique=true)
     */
    protected $username;

    /**
     * @ORM\Column(type="string")
     */
    protected $password;

    /**
     * @ORM\Column(type="string")
     */
    protected $salt;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    protected $idRole;

    /**
    * @ORM\Column(type="integer", nullable=true)
    */
    protected $idAnagrafica;

    /**
    * @ORM\Column(type="integer", nullable=true)
    */
    protected $idTipoVisita;

    /**
    * @ORM\Column(type="boolean", nullable=true)
    */
    protected $attivo;


// Definizioni delle funzioni Get

    /**
    * @return integer
    */
    public function getId()
    {
    return $this->id;
    }

    /**
    * @return string
    */
    public function getUsername()
    {
    return $this->username;
    }

    /**
    * @return string
    */
    public function getPassword()
    {
    return $this->password;
    }

    /**
    * @return string
    */
    public function getSalt()
    {
    if (null === $this->salt) {
    $this->salt = sha512(sprintf(
    '%s_%d_%f',
    uniqid(),
    rand(0, 99999),
    microtime(true)
    ));
    }

    return $this->salt;
    }

     /**
     * @return array
     */
     public function getRoles()
     {
     return array('ROLE_ADMIN', 'ROLE_USER', 'ROLE_DOCTOR' );
     }

    /**
    * @return integer
    */
    public function getIdRole()
    {
    return $this->idRole;
    }

    /**
    * @return integer
    */
    public function getIdAnagrafica()
    {
    return $this->idAnagrafica;
    }

    /**
    * @return integer
    */
    public function getIdTipoVisita()
    {
    return $this->idTipoVisita;
    }

    /**
    * @return boolean
    */
    public function getAttivo()
    {
    return $this->attivo;
    }


// Definizione delle funzioni Set

     /**
     * @return void
     */
     public function eraseCredentials()
     {
     $this->roles = null;
     }

    /**
     * Set username
     *
     * @param string $username
     * @return User
     */
    public function setUsername($username)
    {
        $this->username = $username;

        return $this;
    }

    /**
     * Set password
     *
     * @param string $password
     * @return User
     */
    public function setPassword($password)
    {
        $this->password = $password;

        return $this;
    }

    /**
     * Set salt
     *
     * @param string $salt
     * @return User
     */
    public function setSalt($salt)
    {
        $this->salt = $salt;

        return $this;
    }

    /**
     * Set idAnagrafica
     *
     * @param integer $idAnagrafica
     * @return User
     */
    public function setIdAnagrafica($idAnagrafica)
    {
        $this->idAnagrafica = $idAnagrafica;

        return $this;
    }

    /**
     * Set riferimento idTipoVisita
     *
     * @param integer $idTipoVisita
     * @return User
     */
    public function setIdTipoVisita($idTipoVisita)
    {
        $this->idTipoVisita = $idTipoVisita;

        return $this;
    }

    /**
     * Set attivo
     *
     * @param bolean $attivo
     * @return User
     */
    public function setAttivo($attivo)
    {
        $this->attivo = $attivo;

        return $this;
    }

        /**
         * Set idRole
         *
         * @param bolean $idRole
         * @return User
         */
        public function setIdRole($idRole)
        {
            $this->idRole = $idRole;

            return $this;
    }

    // Funzioni advance user interface
        public function isAccountNonExpired()
        {
            return true;
        }

        public function isAccountNonLocked()
        {
            return true;
        }

        public function isCredentialsNonExpired()
        {
            return true;
        }

        public function isEnabled()
        {
            return $this->attivo;
    }

}

我的“ attivo”字段是我使用的布爾字段,而不是“ isActive”。 由於文檔( http://symfony.com/doc/current/cookbook/security/entity_provider.html ),我完成了所有必要的步驟以使其工作。 將“ attivo”字段設置為0的用戶可以執行登錄。

怎么了? 我錯過了什么? 謝謝。

您的User類必須實現AdvancedUserInterface而不是UserInterface。

您可以替換為:
class User implements UserInterface
通過
class User implements AdvancedUserInterface

因為AdvancedUserInterface擴展了UserInterface

修改高級用戶界面的方法,如下所示。 讓他們返回attivo的狀態,而不是返回true。

public function isAccountNonExpired()
    {
        return $this->attivo;
    }

    public function isAccountNonLocked()
    {
        return $this->attivo;
    }

    public function isCredentialsNonExpired()
    {
       return $this->attivo;
    }

    public function isEnabled()
    {
        return $this->attivo;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM