在symfony

时间:2015-12-18 02:46:23

标签: php symfony authentication

经过一番努力,我能够在Symfony中实现自定义用户提供程序,但它没有按预期工作,我很难发现我出错的地方。

这是我的设置:

我创建了一个CustomUserProvider类,如下所示:

<?php
namespace XXX\AccountsBundle\Security\User;

use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;

use XXX\AccountsBundle\Entity\Accounts;

class CustomUserProvider implements UserProviderInterface
{

    protected $user;

    public function __contsruct (UserInterface $user) {
        $this->user = $user;
    }

    function loadUserByUsername($username) {
        $user = Accounts::find(array('email'=>$username));
        if(empty($user)){
            throw new UsernameNotFoundException('Could not find user. Sorry!');
        }
        $this->user = $user;
        return $user;
    }

    function refreshUser(UserInterface $user) {
        return $user;
    }

    function supportsClass($class) {
        return $class === 'XXX\AccountsBundle\Entity\Accounts';
    }
}

我注册了这样的服务:

parameters:
    xxx_userentity.class:  XXX\AccountsBundle\Entity\Accounts
    xxx_userprovider.class: XXX\AccountsBundle\Security\User\CustomUserProvider

services:
    userproviderentity:
        class: %xxx_userentity.class%
    userproviderclass:
        class: %xxx_userprovider.class%
        arguments:    ['@userproviderentity']

我创建了这样的提供者:

providers:
    main:
      id: userproviderclass

我遇到的问题是,当我尝试登录时,loadUserByUsername函数中的$ username变量似乎是空的,因此我无法实现我需要的逻辑(这就是为什么我创建了一个首先是自定义用户提供商。)

我可以确认该函数实际上正在执行,因为我可以强制它上面的例外,如果它没有被执行就不会工作,所以我知道代码正在执行但是我不知道为什么当有人登录时,该变量为空。

原始(工作)设置(没有自定义用户提供程序)只使用此提供程序设置:

providers:
    main:
      entity:
            class: XXX\AccountsBundle\Entity\Accounts
            property: email

这确实有效。我的猜测是我需要以某种方式指定属性:我的提供商中的电子邮件,但我不是100%明确我应该如何做到这一点。

我感谢任何指示!

0 个答案:

没有答案