在我的平臺上,管理員創建了一個隨機生成密碼的用戶,這會自動向這個新用戶發送一封電子郵件。該電子郵件包含一個指向重置密碼頁面的鏈接(這將是用戶的密碼創建頁面,因為他不知道他已經生成了密碼)。
問題是當用戶單擊電子郵件鏈接并到達更改密碼頁面時,他以管理員身份登錄,因此擁有他不應該擁有的權限。
事實上,我希望電子郵件鏈接將新用戶連接到他的帳戶,我不希望他以管理員身份登錄。我不知道該怎么做。
我對令牌了解不多。我相信令牌是根據使用的會話生成的(?)。
預先感謝您的幫助。
這是創建用戶的代碼:
/**
* @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熱心網友回復:
這是預期的行為,因為:
當與同一個域互動時,同一個瀏覽器的多個選項卡/實體通常會共享同一個服務器端會話。
意味著默認情況下,您不能在不同的選項卡中使用不同的用戶登錄。
而且我不認為你會想要這個,只是想想缺點,你真的想為每個標簽重新登錄嗎?這是非常不常見的做法。想象一下,您將在新選項卡中打開一個堆疊溢位問題,而您不會在那里登錄。
雖然有一些方法可以實作這一點,但如果那是您的實際用例,我不這么認為,您只是在開發您的功能并對其進行測驗,并且在生產中,新用戶不會已經以管理員身份登錄是我的假設。
因此,為了測驗您的功能,只需使用私有選項卡(通常不共享相同的服務器端會話)
如果您想了解更多資訊,我發現這個非常酷的執行緒,用戶試圖盡可能地解釋 什么是會話?它們是如何作業的?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/406308.html
標籤:
下一篇:Laravel7-角色和權限
