You are here

public static function IpLoginController::checkIpLoginExists in IP Login 4.x

Looks up if current request IP matches an IP login.

Parameters

\Symfony\Component\HttpFoundation\Request $request: A request object.

Return value

string|false Returns the user ID if the IP address was matched, FALSE otherwise.

4 calls to IpLoginController::checkIpLoginExists()
EarlyIpLoginMiddleware::handle in src/StackMiddleware/EarlyIpLoginMiddleware.php
IpLoginController::canLoginAsAnotherUser in src/IpLoginController.php
Checks whether a user can log into another account.
IpLoginController::loginProcess in src/IpLoginController.php
Menu callback for IP-based login: do the actual login.
ip_login_form_user_login_form_alter in ./ip_login.module
Implements hook_form_FORM_ID_alter() for 'user_login_form'.

File

src/IpLoginController.php, line 78

Class

IpLoginController

Namespace

Drupal\ip_login

Code

public static function checkIpLoginExists(Request $request) {
  $ip = inet_pton($request
    ->getClientIp());

  // This query is done super early in the request (before page cache), so we
  // can optimize the majority case when the entity type is using core's
  // default storage handler, and do a straight database query.
  $entity_type = \Drupal::entityTypeManager()
    ->getDefinition('user');
  if (is_subclass_of($entity_type
    ->getStorageClass(), SqlContentEntityStorage::class)) {
    $result = \Drupal::database()
      ->select('users_field_data', 'ufd')
      ->fields('ufd', [
      'uid',
    ])
      ->condition('ip_login__ip_start', $ip, '<=')
      ->condition('ip_login__ip_end', $ip, '>=')
      ->condition('status', 1)
      ->orderBy('uid', 'DESC')
      ->range(0, 1)
      ->execute()
      ->fetchCol();
    $uid = reset($result);
  }
  else {
    $query = \Drupal::entityQuery('user')
      ->condition('ip_login.ip_start', $ip, '<=')
      ->condition('ip_login.ip_end', $ip, '>=')
      ->condition('status', 1);
    $uids = $query
      ->execute();
    $uid = reset($uids);
  }
  return $uid;
}