重试在Symfony2中的其他服务上登录失败

时间:2013-07-04 12:12:06

标签: php symfony doctrine-orm doctrine

我正在学习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;
}

我会认为,这样可以完美运行,但找不到任何获取密码的方法,用户试图登录?

这是否是为此目的的正确文件?

1 个答案:

答案 0 :(得分:0)

单独的实体提供商不是正确的地方,因为安全框架(对,实体提供商)进行密码检查。对于高级安全性内容,您必须了解安全系统的内部,尤其是authentication部分。对于您的用例,您需要write an authentication provider来完成您的问题中发布的工作。