我有一个名为CustomUserProvider的自定义用户提供程序,我用它来管理登录。我一直遇到的问题是,它没有验证/登录用户 - 它刷新了页面,没有任何反应。
我甚至一直遵循它,看看它是否进入了loadUserByUsername方法,而且它是。 $userData
会填充正确的用户,并且应该返回它。为了更进一步,我甚至还设置了一个自定义身份验证器,以确保令牌正确生成 - 即使这样,它也没有记录它们 - 只是刷新页面,实际上没有发生任何事情。 / p>
以下是来自loadUserByUsername
的{{1}}代码段。
CustomUserProvider
这是我的public function loadUserByUsername($username)
{
// query database and do the custom salt/password check
$userData = $this->em->createQuery(
'....'
)->setParameter('username', $username)
->getResult();
if (count($userData) > 0) {
return $userData[0];
} else {
throw new UsernameNotFoundException(
sprintf('Username "%s" does not exist.', $username)
);
}
}
文件:
security.yml
*更新*
我正在检查security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
Project\Bundle\MainBundle\Entity\Accounts: sha512
providers:
chain_provider:
chain:
providers: [my_fos_facebook_provider, custom_provider]
my_fos_facebook_provider:
id: my.facebook.user
custom_provider:
id: custom_user_provider
firewalls:
secured_area:
pattern: ^/
fos_facebook:
app_url: "http://apps.facebook.com/sendioso-dev/"
server_url: "http://www.website.com/facebookApp/"
login_path: _security_login
check_path: _security_check
default_target_path: /
provider: my_fos_facebook_provider
form_login:
login_path: project_main_login
check_path: project_main_login_check
provider: custom_provider
logout:
path: project_main_logout
anonymous: ~
#simple_preauth:
# authenticator: custom_authenticator
access_control:
- { path: ^/account, roles: ROLE_USER }
,结果出现了:
dev.log
所以看起来它有点工作,但它实际上并没有让我登录 - 只刷新页面就是这样。
*更新2 *
我在[2014-02-21 21:39:40] security.INFO: User "email@email.com" has been authenticated successfully [] []
中调用refreshUser(UserInterface $user)
时,进行了更多挖掘,并发现它正在传递一个包含所有NULL值的帐户对象。
任何人都知道为什么会这样做?
答案 0 :(得分:0)
我发现了这个问题。
在序列化“帐户”对象时,它不会在序列化中保留数据。因此,无论何时反序列化,它都会使所有内容都为NULL。
我进入实体并修复了序列化的方式,所以现在它会保留我需要的列才能工作。