artemyurov/moonshine-mailru-auth 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

artemyurov/moonshine-mailru-auth

Composer 安装命令:

composer require artemyurov/moonshine-mailru-auth

包简介

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

README 文档

README

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'ить)
  • Конфигурируемая модель пользователя и поле для поиска по email
  • Нормальная обработка ошибок: Log::error() + flash-алерт через <x-moonshine::alert> + toast()
  • Поддержка prompt_force (выбор другого аккаунта Mail.ru)

Требования

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

Установка

1. Composer

composer require artemyurov/moonshine-mailru-auth

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

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

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

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

3. .env

MAILRU_CLIENT_ID / MAILRU_CLIENT_SECRET берутся в кабинете https://o2.mail.ru/app/.

MAILRU_CLIENT_ID=
MAILRU_CLIENT_SECRET=

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

4. config/moonshine.php

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

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

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

В настройках OAuth-приложения (https://o2.mail.ru/app/) указать redirect URI:

<APP_URL>/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', '<APP_URL>/mailru/callback'),

    // Модель Eloquent для поиска пользователя
    'user_model'      => \App\Models\User::class,

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

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

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

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

Прописать в 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, без аккордеона

В своём 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

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

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

Как работает 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. Поиск по config('mailru-auth.user_model') через 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

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-06-15