Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
kohinos-tav
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
3
Merge Requests
3
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
agplv3
kohinos-tav
Commits
a81efc21
Commit
a81efc21
authored
Apr 08, 2025
by
Damien Moulard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
WIP prevent automaticaly enabeling user at password creation #3
parent
36bd6850
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
38 additions
and
30 deletions
+38
-30
services.yaml
config/services.yaml
+5
-1
ResettingController.php
src/Controller/ResettingController.php
+33
-29
No files found.
config/services.yaml
View file @
a81efc21
...
@@ -198,7 +198,11 @@ services:
...
@@ -198,7 +198,11 @@ services:
autowire
:
false
autowire
:
false
App\Controller\ResettingController
:
App\Controller\ResettingController
:
autowire
:
false
arguments
:
$userManager
:
'
@fos_user.user_manager'
$formFactory
:
'
@fos_user.resetting.form.factory'
$dispatcher
:
'
@event_dispatcher'
tags
:
[
'
controller.service_arguments'
]
app.flux.listener
:
app.flux.listener
:
class
:
App\Listener\FluxListener
class
:
App\Listener\FluxListener
...
...
src/Controller/ResettingController.php
View file @
a81efc21
...
@@ -2,62 +2,66 @@
...
@@ -2,62 +2,66 @@
namespace
App\Controller
;
namespace
App\Controller
;
use
FOS\UserBundle\Controller\ResettingController
as
BaseController
;
use
Symfony\Bundle\FrameworkBundle\Controller\AbstractController
;
use
FOS\UserBundle\Event\GetResponseUserEvent
;
use
FOS\UserBundle\Event\FormEvent
;
use
FOS\UserBundle\FOSUserEvents
;
use
FOS\UserBundle\Model\UserInterface
;
use
FOS\UserBundle\Model\UserManagerInterface
;
use
Symfony\Component\HttpFoundation\Request
;
use
Symfony\Component\HttpFoundation\Request
;
use
Symfony\Component\HttpFoundation\RedirectResponse
;
use
Symfony\Component\HttpFoundation\RedirectResponse
;
use
Symfony\Component\Routing\Annotation\Route
;
use
Symfony\Component\Routing\Annotation\Route
;
use
FOS\UserBundle\Model\UserManagerInterface
;
use
FOS\UserBundle\Form\Factory\FactoryInterface
;
use
FOS\UserBundle\Event\FormEvent
;
use
FOS\UserBundle\FOSUserEvents
;
use
Symfony\Component\EventDispatcher\EventDispatcherInterface
;
use
Symfony\Component\Security\Core\Exception\AccessDeniedException
;
class
ResettingController
extends
Base
Controller
class
ResettingController
extends
Abstract
Controller
{
{
private
$userManager
;
private
$formFactory
;
private
$dispatcher
;
public
function
__construct
(
UserManagerInterface
$userManager
,
FactoryInterface
$formFactory
,
EventDispatcherInterface
$dispatcher
)
{
$this
->
userManager
=
$userManager
;
$this
->
formFactory
=
$formFactory
;
$this
->
dispatcher
=
$dispatcher
;
}
/**
/**
* Override action from FOSUserBundle to prevent automatically enabeling a user
* Create a custom ResettingController for the reset password action.
* if its account was created disabled by the admin
* This is done to prevent automatic activation of user after changing password,
* in case the admin created the account disabled.
*
*
* @Route("/resetting/reset/{token}", name="fos_user_resetting_reset")
* @Route("/resetting/reset/{token}", name="fos_user_resetting_reset")
*/
*/
public
function
resetAction
(
Request
$request
,
$token
)
public
function
resetAction
(
Request
$request
,
string
$token
)
{
{
$user
=
$this
->
get
(
'fos_user.user_manager'
)
->
findUserByConfirmationToken
(
$token
);
$user
=
$this
->
userManager
->
findUserByConfirmationToken
(
$token
);
if
(
null
===
$user
)
{
throw
$this
->
createNotFoundException
(
sprintf
(
'The user with password reset token "%s" does not exist'
,
$token
));
}
$event
=
new
GetResponseUserEvent
(
$user
,
$request
);
if
(
null
===
$user
)
{
$this
->
get
(
'event_dispatcher'
)
->
dispatch
(
$event
,
FOSUserEvents
::
RESETTING_RESET_INITIALIZE
);
throw
$this
->
createNotFoundException
(
sprintf
(
'L’utilisateur avec le token %s n’existe pas.'
,
$token
));
if
(
null
!==
$event
->
getResponse
())
{
return
$event
->
getResponse
();
}
}
$form
=
$this
->
$
formFactory
->
createForm
();
$form
=
$this
->
formFactory
->
createForm
();
$form
->
setData
(
$user
);
$form
->
setData
(
$user
);
$form
->
handleRequest
(
$request
);
$form
->
handleRequest
(
$request
);
if
(
$form
->
isSubmitted
()
&&
$form
->
isValid
())
{
if
(
$form
->
isSubmitted
()
&&
$form
->
isValid
())
{
$event
=
new
FormEvent
(
$form
,
$request
);
$event
=
new
FormEvent
(
$form
,
$request
);
$this
->
get
(
'event_dispatcher'
)
->
dispatch
(
$event
,
FOSUserEvents
::
RESETTING_RESET_SUCCESS
);
$this
->
dispatcher
->
dispatch
(
$event
,
FOSUserEvents
::
RESETTING_RESET_SUCCESS
);
// D
elete tokent but don't activate account
// D
on't force enable user, as opposed to what's done in FOSUserBundle
$user
->
setConfirmationToken
(
null
);
$user
->
setConfirmationToken
(
null
);
$user
->
setPasswordRequestedAt
(
null
);
$user
->
setPasswordRequestedAt
(
null
);
// $user->setEnabled(false);
// Don't automatically enable user if it was created disabled
$this
->
userManager
->
updateUser
(
$user
);
// $user->setEnabled(true);
$this
->
get
(
'fos_user.user_manager'
)
->
updateUser
(
$user
);
if
(
null
===
$response
=
$event
->
getResponse
())
{
if
(
null
===
$response
=
$event
->
getResponse
())
{
$url
=
$this
->
generateUrl
(
'fos_user_profile_show'
);
$response
=
new
RedirectResponse
(
$this
->
generateUrl
(
'fos_user_profile_show'
));
$response
=
new
RedirectResponse
(
$url
);
}
}
$this
->
get
(
'event_dispatcher'
)
->
dispatch
(
new
\Symfony\Component\EventDispatcher\GenericEvent
(
$user
),
FOSUserEvents
::
RESETTING_RESET_COMPLETED
);
$this
->
dispatcher
->
dispatch
(
new
\Symfony\Component\EventDispatcher\GenericEvent
(
$user
),
FOSUserEvents
::
RESETTING_RESET_COMPLETED
);
return
$response
;
return
$response
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment