Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Я уже вообще ничего не понимаю. Сейчас объясню, как это вижу я, и больше в этой теме писать не буду.
И, сразу оговорюсь, я новичок в Laravel, могу ошибиться.
Итак.
Есть форма логина, и неважно, где на сайте она расположена, хоть в /login, хоть в /admin/login
Она - одна и та же.
Когда пользователь (или админ) выполняет вход, контроллер, или миддлваре (тоже один и тот же) проверяет, кто зашел и, в зависимости от этого делает редирект.
И уже там, по роуту, на который был редирект, подключаются соответствующий контроллер, представление и все остальное.
Так бы сделал я, и не вижу здесь никаких сложностей.
Всё
Не в сети
Так это и так работает по умолчанию.
Только добавить редирект для админа в админ-часть.
По ссылкам на скриншоте как нужно.
Не в сети
Насколько я понимаю, задача решается созданием собственного гварда
https://mattstauffer.co/blog/multiple-a … aravel-5-2
Не в сети
Не в сети
Да обычная авторизация нужна.
Такого вида:
http://example.com/login Пример: http://joxi.net/8An9633u4G7O2O
http://example.com/admin/login Пример: http://joxi.net/L21d033UBygEmX
Изменено AlexXYZ (27.11.2016 11:35:01)
Не в сети
Кони-люди - всегда плохо. Для фронтэнда один контроллер, для бэкэнда свой. Роутов понадобится два (если канеш не хочешь чтобы там еще регились, сбрасывали пароли).
// форма входа
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) наверняка работал редирект обратно на ту страницу, откуда чел попал на форму логина в админку.
Код не проверял, но должОн работать.
Не в сети
Ну, или как варинат - смотри, с какого ури пришли в стандартный контроллер, если /admin/login (или как оно там у тебя) - метод showLoginForm отдаёт вьюху однмина, если что-то другое - фронтэнд. Но это плохо. Кони - в дом, люди - в стойло! На том стояло и стоит ООП.
Не в сети
Как вариант...
Также решал такую задачу. Вот решение.
Роут для админки
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)
Не в сети