检查密码并使用FOSUserBundle手动创建用户

Jad*_*ber 22 passwords symfony fosuserbundle

我在我的应用程序中使用FOSUserBundle.我想通过HTTP服务做两件事:

  1. 检查密码.该服务可能如下所示(密码不会被加密):

    public function checkPasswordValidity($userId, $password) {
        $user = $this->getDoctrine()
            ->getRepository('MyCompany\UserBundle\Entity\User')
            ->find($userId);
    
        if (specialFunction($user , $password))
            echo 'Valid Password';
        else
            echo 'Invalid Password';
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 通过其他HTTP服务创建新用户.参数将是用户名和密码.

小智 63

  1. 检查密码:

    $encoder_service = $this->get('security.encoder_factory');
    $encoder = $encoder_service->getEncoder($user);
    $encoded_pass = $encoder->encodePassword($password, $user->getSalt());
    
    //then compare    $user->getPassword() and $encoded_pass
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建一个新用户:

    $userManager = $this->get('fos_user.user_manager');
    $user = $userManager->createUser();
    $user->setUsername($login);
    $user->setPlainPassword($pass);
    ...
    $userManager->updateUser($user);
    
    Run Code Online (Sandbox Code Playgroud)


Tom*_*mas 6

对我来说工作:

$encoder_service = $this->get('security.encoder_factory');
$encoder = $encoder_service->getEncoder($user);
if ($encoder->isPasswordValid($user->getPassword(), $password, $user->getSalt()) {}
Run Code Online (Sandbox Code Playgroud)

我没有测试第二个问题,但我认为它已经回答了.