php - 具有 REST API 密码更改的 FosUserBundle - Symfony 4

标签 php symfony fosuserbundle

将此问题发布在 github issues 上,但实际上它可能属于此处。

我正在稳步将 Symfony 应用程序升级到 S4,并且在通过 REST API 更改密码方面遇到了一些障碍。

我当前的 Controller 基本上是从 FosUserBundle Controller (ChangePasswordController.php) 中窃取的,并进行了一些更改,特别是禁用 csrf,当然还有返回 json 响应而不是渲染模板。

随着 S4 中的新变化,我收到了预期的服务错误,但不幸的是,这些错误似乎无法通过依赖注入(inject)来修复。出错的是 FOS\UserBundle\Form\Factory\FactoryInterface - 我得到“无法 Autowiring 服务”。

我知道这一点不会改变,但我也渴望找到前进的方向。今后通过 REST API 更新用户密码的推荐方法是什么?

到目前为止我的想法是:

  1. 获取普通的“当前”密码,使用与 bundle 相同的机制对其进行哈希处理,并比较哈希值以确保首先输入了正确的密码。
  2. 比较两个简单的"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/

相关文章:

Symfony 2.3/FOSUserBundle : Redirect to login page even if route is not matched

php - javascript 不会解析 php html 标签

php - 如何执行 2 个条件查询并将数据检索到单个表中

php - Symfony2 : no extension to load Buzz

php - 带有 Fosuserbundle 的 webtests symfony 2.5

symfony - 带前缀的 FOSUserBundle 注销不起作用

javascript - 如何从数组中获取不同的值?

php - MYSQLi 日期格式 - 选择查询

php - Symfony2 Redis Validator,字符串而不是 ClassMetadata

Symfony2 : how can I load a user taking into account its mapping entity?