代码之家  ›  专栏  ›  技术社区  ›  DerpyNerd

获取匿名用户的用户实例

  •  1
  • DerpyNerd  · 技术社区  · 7 年前

    我的symfony项目设置得非常整洁,但我一直在努力解决这一点。

    App/Entity/User 类,用于从数据库填充用户信息

    class User implements AdvancedUserInterface, \Serializable
    {
        public function __construct()
        {
            $this->forumPermission = new ArrayCollection();
            $this->activities = new ArrayCollection();
        }
    
        /**
         * @ORM\Id
         * @ORM\Column(type="integer")
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
        /**
         * @ORM\Column(
         *     type="string",
         *     name="salt",
         *     length=32
         * )
         */
        private $salt = "";
        /**
         * @ORM\Column(
         *     type="string",
         *     length=75,
         *     name="user_name"
         * )
         * @Assert\NotBlank(
         *     message="De gebruikersnaam moet ingevuld zijn"
         * )
         */
        private $username;
        // ...
    }
    

    并在security.yaml中正确链接

    security:
        # https://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers
        providers:
            db_provider:
                entity:
                    class: App\Entity\User
                    property: username
    

    我觉得方便的是匿名用户可以拥有自己的用户实例,但是 $this->getUser() === null . 我明白为什么,但我很固执:

    abstract class BaseController extends Controller
    {
        protected $logger = null;
        protected $globals = null;
        protected $translator = null;
        protected $security = null;
        /* @var $currentUser User */
        protected $currentUser = null;
    
        public function __construct(
            Globals $globals,
            LoggerInterface $logger,
            TranslatorInterface $translator,
            Security $security
        ) {
            $this->logger = $logger;
            $this->globals = $globals;
            $this->translator = $translator;
            $this->currentUser = $security->getUser();
        }
    
        protected function getUser() {
            if (!$this->currentUser instanceof User) {
                /* @var $anonForumPerm ForumPermission */
                $anonForumPerm = $this->getDoctrine()->getRepository(ForumPermission::class)->find(5);
                $this->currentUser = new User();
                $this->currentUser->setName('Anonymous')
                    ->setSurname('User')
                    ->setUsername('anon.')
                    ->setForumPermission($anonForumPerm)
                ;
            }
            return $this->currentUser;
        }
        // ...
    }
    

    这似乎管用,但我现在唯一的问题是 app.user 仍然是空的。

    有办法推吗 $this->currentUser 应用程序用户 在树枝上?

    我的理论是,我想在 应用程序用户 或者 IS_AUTHENTICATED_FULLY

    如有额外意见,将不胜感激

    1 回复  |  直到 7 年前
        1
  •  0
  •   Carol-Theodor Pelu    7 年前

    我以前也遇到过这个问题,下面是我的一些经验。

    如果你网站的访问者没有登录,Symfony会给他 AnonymousToken {{ app.token.user }} 返回字符串 anon.

    另一种方法是简单地检查 {{ app.user }} 不是 null