我正在学习Symfony2,我喜欢它!
我一直在使用这本好书和食谱,但我无法在任何地方找到答案
我正在使用另一个第三方登录API,但响应速度有点慢,所以我希望将已知用户存储在我自己的数据库中以缩短响应时间。
我已设法使用entity provider创建自己的数据库并且它可以正常工作
现在,当登录失败时,我想让Symfony尝试使用我的其他服务登录。
这就是我发现新代码的逻辑。
public function loadUserByUsername($username) {
$q = $this
->createQueryBuilder('u')
->where('u.username = :username')
->setParameter('username', $username)
->getQuery();
try {
$user = $q->getSingleResult();
} catch (NoResultException $e) {
// Try login to other service before failing
$login = $APIHelper->login($username, $password);
if ($login) {
// Make sure the user is persisted to database
...
// Return the user
return $login->getUser();
}
else {
$message = sprintf(
'Unable to find user SHSnaphackBundle:User object identified by "%s".', $username
);
throw new UsernameNotFoundException($message, 0, $e);
}
}
return $user;
}
我会认为,这样可以完美运行,但找不到任何获取密码的方法,用户试图登录?
这是否是为此目的的正确文件?
答案 0 :(得分:0)
单独的实体提供商不是正确的地方,因为安全框架(对,实体提供商)进行密码检查。对于高级安全性内容,您必须了解安全系统的内部,尤其是authentication部分。对于您的用例,您需要write an authentication provider来完成您的问题中发布的工作。