拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 Symfony,重置密码链接记录了错误的用户

Symfony,重置密码链接记录了错误的用户

白鹭 - 2022-03-01 2152 0 0

在我的平台上,管理员创建了一个随机生成密码的用户,这会自动向这个新用户发送一封电子邮件。该电子邮件包含一个指向重置密码页面的链接(这将是用户的密码创建页面,因为他不知道他已经生成了密码)。

问题是当用户单击电子邮件链接并到达更改密码页面时,他以管理员身份登录,因此拥有他不应该拥有的权限。

事实上,我希望电子邮件链接将新用户连接到他的账户,我不希望他以管理员身份登录。我不知道该怎么做。

我对令牌了解不多。我相信令牌是根据使用的会话生成的(?)。

预先感谢您的帮助。

这是创建用户的代码:

/**
     * @Route("/new", name="user_new", methods={"GET", "POST"})
     * @throws TransportExceptionInterface
     */
    public function new(Request $request, MailSender $mailSender,UserPasswordHasherInterface $passwordHasher): Response
    {
        // TODO CHECK IF USER ALREADY EXISTS BY EMAIL
        $user = new User();
        $form = $this
            ->createForm(UserType::class, $user)
            ->handleRequest($request);

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

            // TODO GENERATE RANDOM PASSWORD
            //$passwordHasher->hashPassword($user, $user->getPassword()));
            $user->setPassword($passwordHasher->hashPassword($user, "password"));
            $this->entityManager->persist($user);
            $this->entityManager->flush();

            try {
                $resetToken = $mailSender->makeToken($user);
            } catch (ResetPasswordExceptionInterface $e) {
                return $this->redirectToRoute('user_new');
            }
            $mailInfos = array('template'=>"reset_password/email_activate.html.twig", 'subject'=>"Activer votre compte", 'email'=>$user->getEmail());
            $mailSender->sendMail($resetToken, $mailInfos);
            $mailSender->storeToken($resetToken);

            return $this->redirectToRoute('user_index', [], Response::HTTP_SEE_OTHER);
        }

        return $this->renderForm('user/new.html.twig', [
            'user' => $user,
            'form' => $form,
        ]);
    }

uj5u.com热心网友回复:

这是预期的行为,因为:

意味着默认情况下,您不能在不同的选项卡中使用不同的用户登录。

而且我不认为你会想要这个,只是想想缺点,你真的想为每个标签重新登录吗?这是非常不常见的做法。想象一下,您将在新选项卡中打开一个堆栈溢位问题,而您不会在那里登录。

虽然有一些方法可以实作这一点,但如果那是您的实际用例,我不这幺认为,您只是在开发您的功能并对其进行测验,并且在生产中,新用户不会已经以管理员身份登录是我的假设。

因此,为了测验您的功能,只需使用私有选项卡(通常共享相同的服务器端会话)

如果您想了解更多信息,我发现这个非常酷的执行绪,用户试图尽可能地解释 什么是会话?它们是如何作业的?

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *