Laravel по-русски

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

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

#26 26.11.2016 13:01:13

Re: Как разделить view auth для админки и сайта

Я уже вообще ничего не понимаю. Сейчас объясню, как это вижу я, и больше в этой теме писать не буду.
И, сразу оговорюсь, я новичок в Laravel, могу ошибиться.
Итак.
Есть форма логина, и неважно, где на сайте она расположена, хоть в /login, хоть в /admin/login
Она - одна и та же.
Когда пользователь (или админ) выполняет вход, контроллер, или миддлваре (тоже один и тот же) проверяет, кто зашел и, в зависимости от этого делает редирект.
И уже там, по роуту, на который был редирект, подключаются соответствующий контроллер, представление и все остальное.
Так бы сделал я, и не вижу здесь никаких сложностей.
Всё smile

Не в сети

#27 26.11.2016 13:06:29

Re: Как разделить view auth для админки и сайта

Так это и так работает по умолчанию.
Только добавить редирект для админа в админ-часть.
По ссылкам на скриншоте как нужно.

Не в сети

#28 27.11.2016 00:46:05

Re: Как разделить view auth для админки и сайта

Насколько я понимаю, задача решается созданием собственного гварда
https://mattstauffer.co/blog/multiple-a … aravel-5-2

Не в сети

#29 27.11.2016 11:04:59

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Как разделить view auth для админки и сайта

Если варриант с единой авторизацией не подходит, то как сказал медвед, мультиавторизация. Создания собственного гварда, и таблици для него

Не в сети

#30 27.11.2016 11:34:05

Re: Как разделить view auth для админки и сайта

Да обычная авторизация нужна.
Такого вида:
http://example.com/login Пример: http://joxi.net/8An9633u4G7O2O

http://example.com/admin/login Пример: http://joxi.net/L21d033UBygEmX

Изменено AlexXYZ (27.11.2016 11:35:01)

Не в сети

#31 28.11.2016 09:14:42

Re: Как разделить view auth для админки и сайта

Кони-люди - всегда плохо. Для фронтэнда один контроллер, для бэкэнда свой. Роутов понадобится два (если канеш не хочешь чтобы там еще регились, сбрасывали пароли).

// форма входа
Route::get('/admin/login', 'AdminLogin@showLoginForm')->name('adminLoginForm');
// проверка правильности ввода
Route::post('/admin/login', 'AdminLogin@login')->name('adminLoginCheck');

Контролллер:

namespase Бла\Бла;

use ...
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class AdminLogin extends Controller {
    // в этом трейте вся магия
    use AuthenticatesUsers;

   protected $redirectTo = '/туда-пойдешь-что-то-не-найдешь';

   public function showLoginForm() {
       return view('вьюхаОдминаТупоКопипастишьИзСтандартнойСПоправкойНаСвоиНуждыИРоуты');
   }

  // если сильно надо можешь переопределить остальные методы трейта, логин, кол-во попыток (это уже другой трейт, его AuthenticatesUsers пользует), его  и прочее и прочее
}

Да, и в посреднике, который будет на эту форму (логин админа) всех слать рекомендую дописать:

public function handle($request, Closure $next)
{
	if(проверкаТвоихУсловий === false)
	{
		return redirect()->guest(route('adminLoginForm'));
	}
	
    return $next($request);
}

Это чтобы в методе sendLoginResponse(Request $request) наверняка работал редирект обратно на ту страницу, откуда чел попал на форму логина в админку.

Код не проверял, но должОн работать.

Не в сети

#32 28.11.2016 09:16:47

Re: Как разделить view auth для админки и сайта

Ну, или как варинат - смотри, с какого ури пришли в стандартный контроллер, если /admin/login (или как оно там у тебя) - метод showLoginForm отдаёт вьюху однмина, если что-то другое - фронтэнд. Но это плохо. Кони - в дом, люди - в стойло! На том стояло и стоит ООП.

Не в сети

#33 16.02.2017 23:06:42

Re: Как разделить view auth для админки и сайта

Как вариант...
Также решал такую задачу. Вот решение.
Роут для админки

Route::group(['prefix' => 'admin', 'middleware' => ['web']], function () {
    Route::get('', ['as' => 'dashboard', function () {
        if (Auth::check()) {
            return view('admin.dashboard'); // админка
        } else {
            return view('auth.adminlogin'); // форма логина с роутами для админки
        }
    }]);
    Route::post('login', 'Auth\AdminLoginController@login')->name('admin.login');
    Route::post('logout', 'Auth\AdminLoginController@logout')->name('admin.logout');

    // Остальные роуты с middleware - auth
    ...
});

AdminLoginController наследуется от LoginController

namespace App\Http\Controllers\Auth;

use Illuminate\Http\Request;

class AdminLoginController extends LoginController
{
    // После логина редиректит в админку
    public function redirectTo()
    {
        return 'admin';
    }
    // После логаута админа редиректит на страницу админки с формой аутентификации
    public function logout(Request $request)
    {
        $this->guard()->logout();
        $request->session()->flush();
        $request->session()->regenerate();
        return redirect('admin');
    }
}

Теперь, если пользователь логинится на сайте, он на сайте и остаётся после логина и логаута. А если зашел в админку, то на этой и входит и выходит.

Возможно есть кашернее решение. С ларавел знаком всего 3 месяца.

Изменено Sergant210 (16.02.2017 23:12:01)

Не в сети

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