Advertisement
Guest User

Untitled

a guest
Mar 10th, 2017
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.75 KB | None | 0 0
  1. class Authenticator extends AbstractGuardAuthenticator
  2. {
  3. private $encoderFactory;
  4. private $userRepository;
  5. private $tokenStorage;
  6. private $router;
  7.  
  8. public function __construct(EncoderFactoryInterface $encoderFactory, UserRepositoryInterface $userRepository, TokenStorageInterface $tokenStorage, Router $router)
  9. {
  10. $this->encoderFactory = $encoderFactory;
  11. $this->userRepository = $userRepository;
  12. $this->tokenStorage = $tokenStorage;
  13. $this->router = $router;
  14. }
  15.  
  16. /**
  17. * Called on every request. Return whatever credentials you want,
  18. * or null to stop authentication.
  19. */
  20. public function getCredentials(Request $request)
  21. {
  22. $encoder = $this->encoderFactory->getEncoder(new User());
  23. $displayname = $request->request->get('_username');
  24. $password = $request->request->get('_password');
  25.  
  26. $users = $this->userRepository->findByDisplayname($displayname);
  27.  
  28. if ($users !== []) {
  29. foreach ($users as $user) {
  30. if ($encoder->isPasswordValid($user->getPassword(), $password, $user->getSalt())) {
  31. return ['username' => $user->getUsername(), 'password' => $user->getPassword()];
  32. }
  33. }
  34. } else {
  35. if ($this->tokenStorage->getToken() !== null) {
  36. $user = $this->tokenStorage->getToken()->getUser();
  37.  
  38. return ['username' => $user->getUsername(), 'password' => $user->getPassword()];
  39. }
  40. }
  41.  
  42. return null;
  43. }
  44.  
  45. public function getUser($credentials, UserProviderInterface $userProvider)
  46. {
  47. if ($credentials !== null) {
  48. return $userProvider->loadUserByUsername($credentials["username"]);
  49. }
  50.  
  51. return null;
  52. }
  53.  
  54. public function checkCredentials($credentials, UserInterface $user)
  55. {
  56. if ($user !== null) {
  57. return true;
  58. } else {
  59. return false;
  60. }
  61. }
  62.  
  63. public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
  64. {
  65. return null;
  66. }
  67.  
  68. public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
  69. {
  70. $exclusions = ['/login'];
  71.  
  72. if (!in_array($request->getPathInfo(), $exclusions)) {
  73. $request->getSession()->set(Security::AUTHENTICATION_ERROR, $exception);
  74. throw $exception;
  75. }
  76. }
  77.  
  78. /**
  79. * Called when authentication is needed, but it's not sent
  80. */
  81. public function start(Request $request, AuthenticationException $authException = null)
  82. {
  83. $data = array(
  84. // you might translate this message
  85. 'message' => 'Authentication Required'
  86. );
  87.  
  88. return new JsonResponse($data, Response::HTTP_UNAUTHORIZED);
  89. }
  90.  
  91. public function supportsRememberMe()
  92. {
  93. return false;
  94. }
  95. }
  96.  
  97. class CustomAuthListener extends UsernamePasswordFormAuthenticationListener
  98. {
  99. private $csrfTokenManager;
  100. private $tokenStorage;
  101.  
  102. public function __construct(TokenStorageInterface $tokenStorage, AuthenticationManagerInterface $authenticationManager, SessionAuthenticationStrategyInterface $sessionStrategy, HttpUtils $httpUtils, $providerKey, AuthenticationSuccessHandlerInterface $successHandler, AuthenticationFailureHandlerInterface $failureHandler, array $options = array(), LoggerInterface $logger = null, EventDispatcherInterface $dispatcher = null, CsrfTokenManagerInterface $csrfTokenManager = null)
  103. {
  104. parent::__construct($tokenStorage, $authenticationManager, $sessionStrategy, $httpUtils, $providerKey, $successHandler, $failureHandler, array_merge(array(
  105. 'username_parameter' => '_username',
  106. 'password_parameter' => '_password',
  107. 'csrf_parameter' => '_csrf_token',
  108. 'csrf_token_id' => 'authenticate',
  109. 'post_only' => true,
  110. ), $options), $logger, $dispatcher);
  111.  
  112. $this->csrfTokenManager = $csrfTokenManager;
  113. $this->tokenStorage = $tokenStorage;
  114. }
  115.  
  116. /**
  117. * {@inheritdoc}
  118. */
  119. protected function attemptAuthentication(Request $request)
  120. {
  121. if ($user = $this->tokenStorage->getToken() !== null) {
  122. $user = $this->tokenStorage->getToken()->getUser();
  123. $username = $user->getUsername();
  124.  
  125. if ($this->options['post_only']) {
  126. $password = ParameterBagUtils::getParameterBagValue($request->request, $this->options['password_parameter']);
  127. } else {
  128. $password = ParameterBagUtils::getRequestParameterValue($request, $this->options['password_parameter']);
  129. }
  130.  
  131. if (strlen($username) > Security::MAX_USERNAME_LENGTH) {
  132. throw new BadCredentialsException('Invalid username.');
  133. }
  134.  
  135. $request->getSession()->set(Security::LAST_USERNAME, $username);
  136.  
  137. return $this->authenticationManager->authenticate(new UsernamePasswordToken($username, $password, $this->providerKey));
  138. } else {
  139. return null;
  140. }
  141. }
  142. }
  143.  
  144. <service id="security.authentication.listener.form" class="YourPathToCustomAuthListener" parent="security.authentication.listener.abstract" abstract="true" />
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement