email_registration-8.x-1.1/src/Controller/UserHttpAuthenticationController.php

src/Controller/UserHttpAuthenticationController.php
<?php

declare(strict_types=1);

namespace Drupal\email_registration\Controller;

use Drupal\user\Controller\UserAuthenticationController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;

/**
 * Provides controllers for login with mail and password via HTTP requests.
 */
class UserHttpAuthenticationController extends UserAuthenticationController {

  /**
   * {@inheritdoc}
   */
  public function login(Request $request) {
    $format = $this->getRequestFormat($request);
    $content = $request->getContent();
    $credentials = $this->serializer->decode($content, $format);

    // If a name is provided, fallback to
    // \Drupal\user\Controller\UserAuthenticationController::login.
    if (isset($credentials['name'])) {
      return parent::login($request);
    }

    if (!isset($credentials['mail']) && !isset($credentials['pass'])) {
      throw new BadRequestHttpException('Missing credentials.');
    }

    if (!isset($credentials['mail'])) {
      throw new BadRequestHttpException('Missing credentials.mail.');
    }
    if (!isset($credentials['pass'])) {
      throw new BadRequestHttpException('Missing credentials.pass.');
    }

    // Set default.
    $name = '';

    // If an email is provided, find the associated name.
    if ($user = user_load_by_mail($credentials['mail'])) {
      $name = $user->getAccountName();

      $this->floodControl($request, $name);

      if ($this->userIsBlocked($name)) {
        throw new BadRequestHttpException('The user has not been activated or is blocked.');
      }

      if ($uid = $this->userAuth->authenticate($name, $credentials['pass'])) {
        $this->userFloodControl->clear('user.http_login', $this->getLoginFloodIdentifier($request, $name));
        /** @var \Drupal\user\UserInterface $user */
        $user = $this->userStorage->load($uid);
        $this->userLoginFinalize($user);

        // Send basic metadata about the logged in user.
        $response_data = [];
        if ($user->get('uid')->access('view', $user)) {
          $response_data['current_user']['uid'] = $user->id();
        }
        if ($user->get('roles')->access('view', $user)) {
          $response_data['current_user']['roles'] = $user->getRoles();
        }
        if ($user->get('mail')->access('view', $user)) {
          $response_data['current_user']['mail'] = $user->getEmail();
        }
        $response_data['csrf_token'] = $this->csrfToken->get('rest');

        $logout_route = $this->routeProvider->getRouteByName('user.logout.http');
        // Trim '/' off path to match \Drupal\Core\Access\CsrfAccessCheck.
        $logout_path = ltrim($logout_route->getPath(), '/');
        $response_data['logout_token'] = $this->csrfToken->get($logout_path);

        $encoded_response_data = $this->serializer->encode($response_data, $format);
        return new Response($encoded_response_data);
      }
    }

    $flood_config = $this->config('user.flood');
    if ($identifier = $this->getLoginFloodIdentifier($request, $name)) {
      $this->userFloodControl->register('user.http_login', $flood_config->get('user_window'), $identifier);
    }

    // Always register an IP-based failed login event.
    $this->userFloodControl->register('user.failed_login_ip', $flood_config->get('ip_window'));
    throw new BadRequestHttpException('Sorry, unrecognized email or password.');
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc