在我的平台上,管理员创建了一个随机生成密码的用户,这会自动向这个新用户发送一封电子邮件。该电子邮件包含一个指向重置密码页面的链接(这将是用户的密码创建页面,因为他不知道他已经生成了密码)。
问题是当用户单击电子邮件链接并到达更改密码页面时,他以管理员身份登录,因此拥有他不应该拥有的权限。
事实上,我希望电子邮件链接将新用户连接到他的账户,我不希望他以管理员身份登录。我不知道该怎么做。
我对令牌了解不多。我相信令牌是根据使用的会话生成的(?)。
预先感谢您的帮助。
这是创建用户的代码:
/**
* @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 评论