Laravel: Получение информации о пользователе

Источник: «Getting the User's Device, Browser & OS in Laravel»
При разработке веб-приложения может возникнуть ситуация, когда вам нужно узнать некоторую информацию о браузере и операционной системе вашего пользователя. В этой статье мы рассмотрим как это сделать.

Варианты использования

Давайте рассмотрим некоторые варианты использования, когда может понадобиться узнать браузер или операционную систему используемые пользователем. С каждой из этих ситуаций я лично сталкивался при работе над проектами в прошлом:

1. Аналитика

Один из наиболее очевидных вариантов использования, о котором вы подумаете, будет аналитика. Конечно, ваш проект может использовать что-то вроде Google Analytics, но могут быть случаи, когда вы не сможете его использовать. Это может быть связано с чем-то вроде соглашения в контракте с клиентом, которое запрещает вам отправлять его данные сторонним службам. Итак, если вы хотите узнать, какие типы браузеров и устройств используют пользователи вашего сайта, вы можете добавить эту функцию самостоятельно. Это может быть важно, если вы пытаетесь оценить следует ли продолжать поддерживать определённые браузеры (например, Internet Explorer).

2. Блокировка устаревших браузеров

У вас может быть проект предназначенный только для работы с современными браузерами, такими как Chrome и Firefox, и запрещает доступ всем, кто использует устаревшие браузеры. Для этого вы могли бы добавить middleware в маршрутизацию для проверки пользовательского браузера. Если используется что-то вроде Internet Explorer, то перенаправлять на страницу браузер не поддерживается.

3. Перенаправление на страницу загрузки для конкретной ОС

Возможно, вы хотите настроить таргетинг на определённые операционной системы или браузеры и предоставлять уникальный контент для каждого из них. Например, если ваш веб-сайт используется для рекламы программного обеспечения, которое можно загрузить в разных операционных системах. Вы можете определить, что использует посетитель и перенаправить его на страницу загрузки связанную с его ОС.

Я не уверен в технических деталях того, как они определяют ОС или выполняют перенаправление, но Slack использует ОС-специфичное перенаправление на страницу загрузок. Например, если я зайду на https://slack.com/downloads?geocode=en-gb/, меня перенаправит на страницу загрузки для MacOS по адресу https://slack.com/intl/en-gb/downloads/mac?geocode=en-gb.

4. Отображение устройств с которых зашёл пользователь

В вашем приложении на странице профиля пользователя может быть раздел, где пользователи могут увидеть все устройства с которых они вошли в систему. Вероятно, вы так же захотите показать им такие вещи, как их местоположение, устройство и браузер.

5. Обнаружение ботов

Возможно, вы захотите иметь возможность обнаруживать ботов и выполнять определённый код при их обнаружении. Например, на странице бесплатных материалов моего сайта, когда реальный пользователь загружает изображение, я увеличиваю счётчик загрузок. Однако, если файл загружается ботом, я не увеличиваю счётчик. Это означает, что количество загрузок более-менее реалистично, а не накрученное ботами.

Получение устройства, браузера и операционной системы

Установка пакета

Перед использованием пакета jenseggers/agent необходимо его установить:

composer require jenssegers/agent

Получение устройства

Предположим, что в контроллере мы хотим узнать, какое устройство использовалось для выполнения запроса. Напишем немного кода:

use Jenssegers\Agent\Facades\Agent;

class UserController extends Controller
{
public function index()
{
$device = Agent::device();

// ...
}
}

В моём случае, когда я делаю запрос к контроллеру, $device будет равно Macintosh, потому что я использую Macbook.

Помимо метода device() пакет предоставляет другие методы, которые можно использовать для определения является ли устройство компьютером, планшетом или телефоном. Вы можете вызывать эти методы в фасаде Agent следующим образом:

Проверка, были ли запрос сделан с компьютера:

Agent::isDesktop();

Проверка, были ли запрос сделан с планшета:

Agent::isTablet();

Проверка, были ли запрос сделан с телефона:

Agent::isTablet();

Получение браузера

Пакет также предоставляет метод browser(), который можно использовать для определения из какого браузера был сделан запрос. Этот метод можно использовать так:

$browser = Agent::browser();

В моём случае, когда я делаю запрос $browser равен Firefox.

Вы так же можете узнать версию браузера, передав результат Agent::browser() методу version() следующим образом:

$browser = Agent::browser();
$version = Agent::version($browser);

У меня $version будет равен 93.0.

Получение операционной системы

Для получения информации об операционной системе пакет предоставляет метод platform(). Используется следующим образом:

$platform = Agent::platform();

В моём случае, $platform равен OS X.

Аналогично тому, как мы получали номер версии браузера, вы можете использовать метод version() для получения версии операционной системы:

$platform = Agent::platform();
$version = Agent::version($platform);

В моём случае, $version равен 10.15.

Обнаружение ботов

Как уже упоминалось ранее, я использую обнаружение ботов, что бы предотвратить накручивание счётчика поисковыми ботами. Для это я использую метод isRobot(), предоставляемый пакетом. Он используется следующим образом:

Agent::isRobot();

Вывод

Надеюсь эта статья дала вам краткий обзор, как получить информацию о типе устройства пользователя, браузера и операционной системе в вашем Laravel приложении. Я так же привёл несколько примеров, когда и зачем вам это может понадобиться.

Дополнительные материалы

Предыдущая Статья

Laravel: Как сделать ваше приложение более тестируемым

Следующая Статья

JavaScript: Глубокое копирование и structuredClone