簡體   English   中英

使用REST API密碼更改的FosUserBundle-Symfony 4

[英]FosUserBundle with REST API password change - Symfony 4

將此問題發布在github問題上,但實際上它可能屬於這里。

我正在穩步將Symfony應用程序升級到S4,並且在通過REST API更改密碼方面遇到了一些障礙。

我目前擁有的當前控制器從FosUserBundle一個( ChangePasswordController.php )中進行了一些更改,尤其是禁用了csrf,當然還返回了json響應,而不是渲染了模板。

通過S4的新更改,我得到了預期的服務錯誤,但是不幸的是,這些錯誤似乎無法通過依賴注入來修復。 出錯的是FOS\\UserBundle\\Form\\Factory\\FactoryInterface我得到“無法自動裝配服務”。

我知道這不會改變,但我也渴望找到前進的道路。 今后通過REST API更新用戶密碼的推薦方法是什么?

到目前為止,我的想法是:

  1. 使用普通的“當前”密碼,使用與捆綁軟件相同的機制對它進行哈希處理,並比較散列值,以確保首先輸入了正確的密碼。
  2. 比較兩個普通的“新”密碼,確保它們匹配,然后使用UserManager設置setPlainPassword

這是一個不好的方法嗎?

Symfony 4方法

UserController.php

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use Symfony\Component\HttpFoundation\Request;

use Symfony\Component\HttpFoundation\Response;

use Symfony\Component\Routing\Annotation\Route;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;

use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;

class UserController extends Controller {

...


    public function appUsersPasswordChange(Request $request, UserPasswordEncoderInterface $encoder){
        $user = $this->getUser();

        $currentPassword = $request->request->get('current_password');
        /* Checking current user password with given password param from $reqest */
        $passwordValid = $encoder->isPasswordValid($user,$currentPassword );
        if($passwordValid){
            ($request->request->get('new_password')) ? $user->setPassword($encoder->encodePassword($user, $request->request->get('new_password'))) : '';        
            $this->em->persist($user);
            $this->em->flush();
        }else{
            return $this->errorResponse('Mismatch current password', $passwordValid );
        }
        return $this->successResponse('Successfully changed password', $passwordValid );
    }

...

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM