Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 19.09.2018 21:40:44

Как написать админку на laravel с одтельным входом

Приветствую форумчан и прошу помощи. Опыта мало, но хочется написать админку для сайта
с отдельной формой для админа.

Пытаюсь следовать совету на блоге по адресу:
https://super-coding.blogspot.com/2017/ … el_14.html

1.
В роутах создаю группу маршрутов для панели, указываю для послердинка auth, парамертр admin. :
Route::group(['namespace' => 'Admin', 'middleware'=>'auth:admin'], function() {
   Route::get('admin/home', 'HomeController@index')->name('admin.home');

   // Аутентификация
   Route::get('admin', 'Auth\LoginController@showLoginForm')->name('admin.login');
   Route::post('admin', 'Auth\LoginController@login');
});

2.
В файле App\Http\Middleware\RedirectIfAuthenticated.php, изменяют метод handle:
    public function handle($request, Closure $next, $guard = null)
    {
        //---
        switch($guard) {
        case 'admin':
            if(Auth::guard($guard)->check())
            {
                return redirect('/admin/home'); //Переадресация админа на главную админки
            }
        break;

        default:
        //---
       
            if (Auth::guard($guard)->check()) {
            return redirect('/cabinet'); //Переадресация юзера в акк
            }
        }   

        return $next($request);
    }
3.
В файле \vendor\laravel\framework\src\Illuminate\Foundation\Exceptions
Изменил метод unauthenticated
    protected function unauthenticated($request, AuthenticationException $exception)
    {
        /* Закомментивровал это
        return $request->expectsJson()
                    ? response()->json(['message' => $exception->getMessage()], 401)
                    : redirect()->guest(route('login'));
                   
         */
       
        //Заменил на это, все что ниже
         if ($request->expectsJson())
         {
            //return response()->json(['error' => 'Unauthenticated.'], 401);
            return response()->json(['message' => $exception->getMessage()], 401);
        }
               
        //---                   
        $guard = array_get($exception->guards(),0);

        switch ($guard)
        {
            case 'admin':
                return redirect()->guest(route('admin.login'));
                break;

            default:
                return redirect()->guest(route('login'));
                break;
        }
        //---
    }

redirect()->guest(route('admin.login')); - этот ридерект почему то зацикливается.

Может кто подскажет почему?

Не в сети

#2 20.09.2018 07:23:42

Re: Как написать админку на laravel с одтельным входом

Может быть потому, что это не всё что нужно реализовать, а только часть.
Я бы начал не с редиректов, а с описания нового гарда в config/auth.php


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#3 20.09.2018 12:51:28

Re: Как написать админку на laravel с одтельным входом

Благодарю за ответ.
Гард описала так:
//---
        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],
        //---

Добавила еще это:
//---
        'admins' => [
            'driver' => 'eloquent',
            'model' => App\Model\Admin\Admin::class,
        ],
//---
Табличку сделала для админа отдельную

Не в сети

#4 20.09.2018 20:13:52

Re: Как написать админку на laravel с одтельным входом

Честно — не знаю как вам помочь не устанавливая проект себе и не пройдясь отладчиком. Чуйка подсказывает, что бесконечный редирект на странице аутентификации может быть если этот маршрут НЕ помечен как исключение для авторизующей мидлвари.

Статью бегло посмотрел, выглядит годно.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#5 20.09.2018 20:18:07

Re: Как написать админку на laravel с одтельным входом

Route::group(['namespace' => 'Admin', 'middleware'=>'auth:admin'], function() {
   Route::get('admin/home', 'HomeController@index')->name('admin.home');

   // Аутентификация
   Route::get('admin', 'Auth\LoginController@showLoginForm')->name('admin.login');
   Route::post('admin', 'Auth\LoginController@login');
});

мне кажется страничка с формой входа не должна требовать auth:admin !


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#6 20.09.2018 20:25:00

Re: Как написать админку на laravel с одтельным входом

Большое спасибо Вам!!! Заработало!

Не в сети

Подвал раздела