私はDelete User
の機能に取り組んでいます。ログに記録されたユーザーは自分のアカウントを削除することができます。その後、彼はホームページにリダイレクトされます。Symfony3:現在のユーザーを削除して自宅にリダイレクトする方法は?
これはコントローラで、次のアクションで、AJAX call
を使用して実装されています
/**
* @Route("settings/delete-user/{userId}", name="delete-user")
*/
public function deleteUserAction(Request $request,
$userId,
EntityManagerInterface $em,
TranslatorInterface $translator,
FormErrorCollector $errorCollector,
SessionInterface $session,
TokenStorageInterface $tokenStorage)
{
$user = $this->getUser();
$deleteUserForm = $this->createForm(ConfirmPasswordType::class);
$deleteUserForm->handleRequest($request);
if($request->isXmlHttpRequest() && $user->getId() == $userId){
if($deleteUserForm->isValid()){
$em->remove($user);
$em->flush();
$session->invalidate(0);
return new JsonResponse(array(
'status' => 'success',
'message' => $translator->trans('USER_DELETED_SUCCESS')
));
}else{
$errors = $errorCollector->getErrors($deleteUserForm);
return new JsonResponse(array(
'status' => 'failure',
'errors' => $errors
));
}
}else{
return new JsonResponse('FORBIDEN');
}
}
実際には、ユーザーがデータベースから削除され、その後、確認してホームページに戻るためのリンクをモーダルに表示されます。
You cannot refresh a user from the EntityUserProvider that does not contain an identifier. The user object has to be serialized with its own identifier mapped by Doctrine.
もちろん、symfonyは私はちょうどそれを削除したため、ユーザーを見つけることができません。問題は、ユーザーがリンクをクリックしたとき、symfonyはこのエラーを示すことです。私はSession
とTokenStorage
を取り除こうとしましたが、問題は修正されるが、まったく修正されないことを望んでいた。
削除したユーザーをホームページにリダイレクトするにはどうすればよいですか。
UPDATE
あなたはsymfonyの3.3以上を使用している場合は、Autowireを使用することができます。その答えの改善は、次のようになります。
1.- TokenStorageInterfaceのための使用を追加します。
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
2.-パスTokenStorageInterfaceあなたDeleteActionのパラメータとして:
public function deleteUserAction(Request $request,$userId,TokenStorageInterface$tokenStorage)
{
3.-クリアトークンセッション:
$tokenStorage->setToken(null);
$session->invalidate();
セッションサービスでautowireを使用することもできます。
あなたは、例えば、$this->get('security.token_storage')->setToken(null);
を削除する前に、手動でユーザーをログアウトしようとすることができます
use Symfony\Component\HttpFoundation\Session\SessionInterface;
削除が必要ですか?退職はおそらくアドバイスされた方法です。私の個人的な好みは決して削除しないでください。 – Doug
これは絶対に必要なわけではありませんが、個人的には、データの一貫性を優先して実際の削除を優先します。 –