将此问题发布在 github issues 上,但实际上它可能属于此处。
我正在稳步将 Symfony 应用程序升级到 S4,并且在通过 REST API 更改密码方面遇到了一些障碍。
我当前的 Controller 基本上是从 FosUserBundle Controller (ChangePasswordController.php
) 中窃取的,并进行了一些更改,特别是禁用 csrf,当然还有返回 json 响应而不是渲染模板。
随着 S4 中的新变化,我收到了预期的服务错误,但不幸的是,这些错误似乎无法通过依赖注入(inject)来修复。出错的是 FOS\UserBundle\Form\Factory\FactoryInterface
- 我得到“无法 Autowiring 服务”。
我知道这一点不会改变,但我也渴望找到前进的方向。今后通过 REST API 更新用户密码的推荐方法是什么?
到目前为止我的想法是:
- 获取普通的“当前”密码,使用与 bundle 相同的机制对其进行哈希处理,并比较哈希值以确保首先输入了正确的密码。
- 比较两个简单的"new"密码,确保它们匹配,然后使用
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 );
}
...
}
关于php - 具有 REST API 密码更改的 FosUserBundle - Symfony 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49277864/