手动身份验证检查 Symfony 2

2024-04-13

我正在开发一个 Symfony 2 应用程序,用户必须在登录过程中选择一个配置文件。

用户可能有多个配置文件可供使用,并且他们只知道自己的配置文件。因此,首先,我需要提示输入用户名和密码,如果这些正确,我不应该登录用户,我需要提示用户在会话期间将使用的配置文件。

因此,我显示一个包含用户名和密码字段的表单,并使用 Ajax 请求发送它,如果用户名和密码正确,则该请求将使用配置文件列表进行响应,否则会返回错误代码。最后,用户使用用户名、密码和个人资料登录系统。

问题是我不知道如何检查身份验证数据是否正确(使用我所有的身份验证管理器、用户提供程序等)来完成此中间步骤(提示输入配置文件),而实际上无需记录用户。

谁能帮我这个?


@Jordon 代码的一个问题是,它不适用于为同一密码生成不同哈希值的哈希算法(例如 bcrypt 在内部记录其参数,包括迭代次数和盐)。使用Encoder的isPasswordValid来比较密码更为正确。

以下是与 bcrypt 配合良好的改进代码:

$username = trim($this->getRequest()->query->get('username'));
$password = trim($this->getRequest()->query->get('password'));

$em = $this->get('doctrine')->getManager();
$query = $em->createQuery("SELECT u FROM \Some\Bundle\Entity\User u WHERE u.username = :username");
$query->setParameter('username', $username);
$user = $query->getOneOrNullResult();

if ($user) {
  // Get the encoder for the users password
  $encoder_service = $this->get('security.encoder_factory');
  $encoder = $encoder_service->getEncoder($user);

  // Note the difference
  if ($encoder->isPasswordValid($user->getPassword(), $password, $user->getSalt())) {
    // Get profile list
  } else {
    // Password bad
  }
} else {
  // Username bad
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

手动身份验证检查 Symfony 2 的相关文章

随机推荐