Redirect user after login to user settings, if he needs to change password.

This commit is contained in:
Jan Böhmer 2019-09-19 14:48:49 +02:00
parent a8612d9609
commit 1301459718
3 changed files with 105 additions and 2 deletions

View file

@ -34,14 +34,20 @@ namespace App\Controller;
use App\Entity\UserSystem\User;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class RedirectController extends AbstractController
{
protected $default_locale;
protected $translator;
protected $session;
public function __construct(string $default_locale)
public function __construct(string $default_locale, TranslatorInterface $translator, SessionInterface $session)
{
$this->default_locale = $default_locale;
$this->session = $session;
$this->translator = $translator;
}
public function addLocalePart(Request $request)
@ -55,9 +61,14 @@ class RedirectController extends AbstractController
$locale = $user->getLanguage();
}
//Check if the user needs to change the password. In that case redirect him to settings_page
if ($user instanceof User && $user->isNeedPwChange()) {
$this->session->getFlashBag()->add('warning', $this->translator->trans('flash.password_change_needed'));
return $this->redirectToRoute('user_settings', ['_locale' => $locale]);
}
//$new_url = str_replace($request->getPathInfo(), '/' . $locale . $request->getPathInfo(), $request->getUri());
$new_url = $request->getUriForPath('/' . $locale . $request->getPathInfo());
return $this->redirect($new_url);
}
}

View file

@ -164,6 +164,10 @@ class UserController extends AdminPages\BaseAdminController
*/
$user = $this->getUser();
if(!$user instanceof User) {
return new \RuntimeException("This controller only works only for Part-DB User objects!");
}
//When user change its settings, he should be logged in fully.
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
@ -208,6 +212,10 @@ class UserController extends AdminPages\BaseAdminController
if ($pw_form->isSubmitted() && $pw_form->isValid()) {
$password = $passwordEncoder->encodePassword($user, $pw_form['new_password']->getData());
$user->setPassword($password);
//After the change reset the password change needed setting
$user->setNeedPwChange(false);
$em->persist($user);
$em->flush();
$this->addFlash('success', 'user.settings.pw_changed_flash');