reload password by token - SamuelPouzet/auth GitHub Wiki

We'll need two forms SamuelPouzet\Auth\Interface\Form\TokenFormInterface; SamuelPouzet\Auth\Interface\Form\ReloadPasswordFormInterface;

use SamuelPouzet\Auth\Service\UserService;

public function reloadPasswordAction(): ViewModel { $token = $this->params()->fromRoute('id', null);

    $form = $this->getForm(TokenFormInterface::class);
    $form->setData(['token' => $token]);

    $user = $this->userService->getUserByToken($form);

    $passwordForm = $this->getForm(ReloadPasswordFormInterface::class);

    if ($this->request->isPost()) {
        $data = $this->params()->fromPost();
        $passwordForm->setData($data);
        if ($passwordForm->isValid()) {
            $formData = $passwordForm->getData();
            $this->userService->updatePassword($user, ['password' => $formData['new_password']]);
            $this->userService->updateToken($user, true);
        }
    }

    return new ViewModel([
        'user' => $user,
        'form' => $passwordForm,
        ]);
}