PHPackages                             artemyurov/moonshine-mailru-auth - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. artemyurov/moonshine-mailru-auth

ActiveLibrary[Authentication &amp; Authorization](/categories/authentication)

artemyurov/moonshine-mailru-auth
================================

OAuth-авторизация через Mail.ru для MoonShine 4.x с кнопкой на странице логина и раскрывающейся стандартной формой админа

v1.0.3(1mo ago)024↓50%MITPHPPHP ^8.3

Since Jun 15Pushed 1mo agoCompare

[ Source](https://github.com/ArtemYurov/moonshine-mailru-auth)[ Packagist](https://packagist.org/packages/artemyurov/moonshine-mailru-auth)[ RSS](/packages/artemyurov-moonshine-mailru-auth/feed)WikiDiscussions main Synced 2w ago

READMEChangelogDependencies (16)Versions (5)Used By (0)

moonshine-mailru-auth
=====================

[](#moonshine-mailru-auth)

OAuth-авторизация через Mail.ru для MoonShine 4.x.

На странице логина добавляется большая синяя кнопка **«Почта Mail.ru»**, а стандартная админ-форма прячется под раскрывающийся блок «Вход для администраторов» (автоматически раскрывается при ошибках валидации).

**Где регистрировать OAuth-приложение:**

- Кабинет:
- Документация:

После 1 июля 2025 новые регистрации OAuth Mail доступны только через VK ID (см. документацию выше). Пакет работает с уже выданными `client_id`/`client_secret`, а также с новыми, выпущенными через VK ID — endpoint `o2.mail.ru` остаётся прежним.

Возможности
-----------

[](#возможности)

- Кнопка `MailRuAuth` на странице логина — OAuth Authorization Code grant через Saloon
- `CollapsibleAdminLogin` — Alpine.js аккордеон для стандартной формы MoonShine
- Готовый `MailRuLoginPage` (можно extends'ить)
- Авто-резолв модели пользователя из MoonShine guard (можно переопределить)
- Конфигурируемое поле для поиска по email
- Нормальная обработка ошибок: `Log::error()` + flash-алерт через `` + `toast()`
- Поддержка `prompt_force` (выбор другого аккаунта Mail.ru)

Требования
----------

[](#требования)

- PHP 8.3+
- Laravel 11 / 12
- MoonShine 4.x
- Eloquent-модель пользователя с полем `email`

Установка
---------

[](#установка)

### 1. Composer

[](#1-composer)

```
composer require artemyurov/moonshine-mailru-auth
```

ServiceProvider регистрируется через Laravel package auto-discovery.

### 2. Опубликовать конфиг

[](#2-опубликовать-конфиг)

```
php artisan vendor:publish --tag=mailru-auth-config
```

Это создаст `config/mailru-auth.php`. Если кастомизировать настройки не нужно — пропустить шаг, дефолты возьмутся из пакета.

### 3. .env

[](#3-env)

`MAILRU_CLIENT_ID` / `MAILRU_CLIENT_SECRET` берутся в кабинете .

```
MAILRU_CLIENT_ID=
MAILRU_CLIENT_SECRET=

# Опционально — по умолчанию APP_URL/mailru/callback
# MAILRU_REDIRECT_URI=
```

### 4. config/moonshine.php

[](#4-configmoonshinephp)

Указать кастомную страницу логина:

```
'pages' => [
    // ...
    'login' => \ArtemYurov\MailRuAuth\MoonShine\Pages\MailRuLoginPage::class,
],
```

### 5. OAuth-приложение

[](#5-oauth-приложение)

В настройках OAuth-приложения () указать redirect URI:

```
/mailru/callback

```

Готово. Заходи на `/admin/login` — увидишь кнопку Mail.ru.

Конфигурация
------------

[](#конфигурация)

`config/mailru-auth.php`:

```
return [
    'client_id'       => env('MAILRU_CLIENT_ID'),
    'client_secret'   => env('MAILRU_CLIENT_SECRET'),
    'redirect_uri'    => env('MAILRU_REDIRECT_URI', '/mailru/callback'),

    // null = модель берётся из MoonShine guard (рекомендуется).
    // Явный класс — для не-Eloquent guard'а или поиска в отдельной таблице.
    'user_model'      => null,

    // Поле, по которому ищется пользователь
    'email_field'     => 'email',

    // Регистрировать роуты mailru.auth / mailru.callback автоматически
    'register_routes' => true,
];
```

### Модель пользователя

[](#модель-пользователя)

По умолчанию пакет берёт класс модели **из MoonShine guard** — той же, через которую потом происходит `loginUsingId()`. Это исключает рассинхрон: если пакет ищет email в одной таблице, а guard логинит по id в другой, можно случайно залогинить чужого пользователя с совпавшим id.

Цепочка резолва:

```
config('mailru-auth.user_model')          // явный override
       ↓ null
MoonShineAuth::getProvider()->getModel()  // ← дефолт
       ↓
config('auth.guards..provider')
       ↓
config('auth.providers..model')

```

Если MoonShine guard использует не Eloquent-провайдер (JWT/Sanctum/API), пакет выбросит `RuntimeException` с подсказкой указать `user_model` явно.

Использование
-------------

[](#использование)

### Готовая страница логина

[](#готовая-страница-логина)

Прописать в `config/moonshine.php`:

```
'pages' => [
    'login' => \ArtemYurov\MailRuAuth\MoonShine\Pages\MailRuLoginPage::class,
],
```

### Своя страница логина

[](#своя-страница-логина)

Унаследовать и добавить любые компоненты:

```
namespace App\MoonShine\Pages;

use ArtemYurov\MailRuAuth\MoonShine\Pages\MailRuLoginPage;

final class LoginPage extends MailRuLoginPage
{
    protected function components(): iterable
    {
        return [
            // Можно добавить свои компоненты перед/после стандартных
            ...parent::components(),
        ];
    }
}
```

### Только кнопка Mail.ru, без аккордеона

[](#только-кнопка-mailru-без-аккордеона)

В своём `LoginPage`:

```
use ArtemYurov\MailRuAuth\MoonShine\Components\MailRuAuth;
use MoonShine\Laravel\Pages\LoginPage as BaseLoginPage;

final class LoginPage extends BaseLoginPage
{
    protected function components(): iterable
    {
        return [
            MailRuAuth::make(),
            ...parent::components(),
        ];
    }
}
```

### Кастомизация views

[](#кастомизация-views)

```
php artisan vendor:publish --tag=mailru-auth-views
```

Views скопируются в `resources/views/vendor/mailru-auth/`. Можно править стили кнопки, аккордеона.

Как работает OAuth flow
-----------------------

[](#как-работает-oauth-flow)

1. На LoginPage отрисовывается кнопка «Почта Mail.ru» (`MailRuAuth`)
2. Submit → `POST /mailru/auth` → редирект на `https://o2.mail.ru/login` с client\_id и scope `userinfo`
3. Callback `GET /mailru/callback?code=...&state=...` → обмен на access\_token
4. Запрос `GET /userinfo` → email пользователя
5. Поиск по модели пользователя (override из конфига либо авто из MoonShine guard) через `config('mailru-auth.email_field')`
6. Логин через `MoonShineAuth::getGuard()->loginUsingId()`
7. Редирект на `moonshineConfig()->getHomeRoute()`

При ошибках на любом шаге — `Log::error()` + `session()->flash('alert', ...)` + `toast()`, редирект обратно на login. Алёрт отображается в блоке `mail-ru-auth.blade.php`. Аккордеон админ-формы автоматически раскрывается при `$errors->any()`.

Лицензия
--------

[](#лицензия)

MIT

###  Health Score

42

—

FairBetter than 88% of packages

Maintenance91

Actively maintained with recent releases

Popularity9

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity52

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

4

Last Release

45d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/ffb938044c91bebfb7bc0aca76e9dae0c7b975080de1b253210617d1c61744c4?d=identicon)[ArtemYurov](/maintainers/ArtemYurov)

---

Top Contributors

[![ArtemYurov](https://avatars.githubusercontent.com/u/13986502?v=4)](https://github.com/ArtemYurov "ArtemYurov (3 commits)")

---

Tags

laravelauthoauthmailrumoonshinevkid

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/artemyurov-moonshine-mailru-auth/health.svg)

```
[![Health](https://phpackages.com/badges/artemyurov-moonshine-mailru-auth/health.svg)](https://phpackages.com/packages/artemyurov-moonshine-mailru-auth)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3345.3M348](/packages/psalm-plugin-laravel)[laravel/mcp

Rapidly build MCP servers for your Laravel applications.

78622.3M192](/packages/laravel-mcp)[api-platform/laravel

API Platform support for Laravel

58174.6k17](/packages/api-platform-laravel)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
