【问题标题】:Reset password symfony 4重置密码 symfony 4
【发布时间】:2018-09-11 01:33:04
【问题描述】:

我正在尝试为 symfony 4 中的用户创建重置密码,我遇到了这个错误

找不到“GET /change-password”的路由:不允许方法(允许: 发布)

我正在寻求帮助

我的控制器:

class ChangepasswordController extends Controller
{
private $oldpassword;
private $newpassword;

/**
 * @Route("/change-password", name="change_password", defaults={"email=null"})
 * @Method("POST")
 * @param Request $request
 * @param AuthenticationUtils $authenticationUtils
 * @param UserPasswordEncoderInterface $passwordEncoder
 * @param $email
 * @return Response
 */
public function ChangepasswordAction(Request $request, UserPasswordEncoderInterface $passwordEncoder, $email)
{
    $user = new User();
    $form = $this->createForm(ChangepasswordType::class, $user);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {

        try {
            $user = $this->getDoctrine()->getRepository(User::class)->find($email);


        } catch (ExceptionInterface $e) {
            $this->addFlash('danger', "Cet email n'existe pas.");
        }

        //Recuperer le nouveau mot de passe tapé par l'utilisateur
        $newpassword = $passwordEncoder->encodePassword($user, $user->getPassword());
        //recuperer l'ancien mot de passe dans la base de donnéees
        $oldpassword = $user->getPassword();

        if ($newpassword = $oldpassword) {
            $this->addFlash('danger', "Ce mot de passe est dejà utilisé.");

        } else {
            $user->setPassword($newpassword);
        }

        $em = $this->getDoctrine()->getManager();
        $em->persist($user);
        $em->flush();

        $this->addFlash('success', 'votre mot de passe est bien  réinitialisé');

        # Redirection sur la page de connexion
        return $this->redirectToRoute('connexion');
    }
    return $this->render(
        'security/changemotdepasse.html.twig',
        array('form' => $form->createView())
    );

}

}

【问题讨论】:

    标签: symfony-forms symfony4 reset-password


    【解决方案1】:

    您必须将@Method("POST") 更改为@Method({"GET","POST"}),因为您的Action 用于显示和处理表单。

    【讨论】:

    • 谢谢,我又搞错了
    【解决方案2】:
    @Route("/change-password", name="change_password"
    

    注意你的定义... - !== _

    【讨论】:

      【解决方案3】:

      我认为 GET 方法不是重置密码的好方法,您可以在 Methode 注释中添加 GET 来修复它,但这是不好的方法。

      最好的方法是通过POST方法发送数据并在$request中处理

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-11
        • 2018-07-15
        • 1970-01-01
        • 1970-01-01
        • 2021-03-10
        相关资源
        最近更新 更多