Залогинимся через
http://blog.my/admin-login
Но даже залгоившись мы
видим страницу http://blog.my/admin-login
Что бы это исправить
поменяем в методе construct middleware
Зайдем в
\app\Http\Controllers\Admin\Auth\LoginController.php
public function
__construct()
{
$this->middleware('guest:admin')->except('logout');
}
{
$this->middleware('guest:admin')->except('logout');
}
Теперь нас
перебрасывает на страницу входа для
пользователя http://blog.my/login
Откроем
файл \app\Http\Middleware\RedirectIfAuthenticated.php
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
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('/home');
}
}
return $next($request);
}
}
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
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('/home');
}
}
return $next($request);
}
}
Если мы
залогинины и мы наберем
http://blog.my/admin-login
то нас
перебросит на http://blog.my/admin/home
Теперь
разлогинимся и наберем http://blog.my/admin/home
и мы попадем на эту страницу.
Идем в
контроллер \app\Http\Controllers\HomeController.php
Скопируем
конструктор:
public function
__construct()
{
$this->middleware('auth');
}
{
$this->middleware('auth');
}
И вставим в файл
\app\Http\Controllers\Admin\HomeController.php
Но перепишем
немного:
public function
__construct()
{
$this->middleware('auth:admin');
}
{
$this->middleware('auth:admin');
}
Теперь
разлогинимся и наберем http://blog.my/admin/home
и мы попадем на страницу логина для
пользователей: http://blog.my/login
Но мы хотим,
чтобы нас перебрасывало на страницу
для залогинивания админа.
Вставим
этот __construct() во все контроллеры, которые
находятся в папке Admin.
В
\routes\web.php укажем middleware,
чтобы нельзя было войти
на страницы админки незалогиненными.
Route::group(['namespace'
=> 'Admin',
'middleware'=>'auth:admin'],
function() {
Route::get('admin/home', 'HomeController@index')->name('admin.home');
Route::resource('admin/user', 'UserController');
Route::resource('admin/post', 'PostController');
Route::resource('admin/tag', 'TagController');
Route::resource('admin/category', 'CategoryController');
// Аутентификация
Route::get('admin-login', 'Auth\LoginController@showLoginForm')->name('admin.login');
Route::post('admin-login', 'Auth\LoginController@login');
});
Route::get('admin/home', 'HomeController@index')->name('admin.home');
Route::resource('admin/user', 'UserController');
Route::resource('admin/post', 'PostController');
Route::resource('admin/tag', 'TagController');
Route::resource('admin/category', 'CategoryController');
// Аутентификация
Route::get('admin-login', 'Auth\LoginController@showLoginForm')->name('admin.login');
Route::post('admin-login', 'Auth\LoginController@login');
});
Прежде
middleware из маршрутов
Route::group(['namespace'
=> 'Admin'], function() {
Route::get('admin/home', 'HomeController@index')->name('admin.home');
Route::resource('admin/user', 'UserController');
Route::resource('admin/post', 'PostController');
Route::resource('admin/tag', 'TagController');
Route::resource('admin/category', 'CategoryController');
// Аутентификация
Route::get('admin-login', 'Auth\LoginController@showLoginForm')->name('admin.login');
Route::post('admin-login', 'Auth\LoginController@login');
});
Route::get('admin/home', 'HomeController@index')->name('admin.home');
Route::resource('admin/user', 'UserController');
Route::resource('admin/post', 'PostController');
Route::resource('admin/tag', 'TagController');
Route::resource('admin/category', 'CategoryController');
// Аутентификация
Route::get('admin-login', 'Auth\LoginController@showLoginForm')->name('admin.login');
Route::post('admin-login', 'Auth\LoginController@login');
});
Идем в
\app\Exceptions\Handler.php
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler
{
/**
* A list of the exception types that should not be reported.
*
* @var array
*/
protected $dontReport = [
\Illuminate\Auth\AuthenticationException::class,
\Illuminate\Auth\Access\AuthorizationException::class,
\Symfony\Component\HttpKernel\Exception\HttpException::class,
\Illuminate\Database\Eloquent\ModelNotFoundException::class,
\Illuminate\Session\TokenMismatchException::class,
\Illuminate\Validation\ValidationException::class,
];
/**
* Report or log an exception.
*
* This is a great spot to send exceptions to Sentry, Bugsnag, etc.
*
* @param \Exception $exception
* @return void
*/
public function report(Exception $exception)
{
parent::report($exception);
}
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $exception)
{
return parent::render($request, $exception);
}
/**
* Convert an authentication exception into an unauthenticated response.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Auth\AuthenticationException $exception
* @return \Illuminate\Http\Response
*/
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 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;
}
}
}
namespace App\Exceptions;
use Exception;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler
{
/**
* A list of the exception types that should not be reported.
*
* @var array
*/
protected $dontReport = [
\Illuminate\Auth\AuthenticationException::class,
\Illuminate\Auth\Access\AuthorizationException::class,
\Symfony\Component\HttpKernel\Exception\HttpException::class,
\Illuminate\Database\Eloquent\ModelNotFoundException::class,
\Illuminate\Session\TokenMismatchException::class,
\Illuminate\Validation\ValidationException::class,
];
/**
* Report or log an exception.
*
* This is a great spot to send exceptions to Sentry, Bugsnag, etc.
*
* @param \Exception $exception
* @return void
*/
public function report(Exception $exception)
{
parent::report($exception);
}
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $exception)
{
return parent::render($request, $exception);
}
/**
* Convert an authentication exception into an unauthenticated response.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Auth\AuthenticationException $exception
* @return \Illuminate\Http\Response
*/
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 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;
}
}
}
Этот комментарий был удален автором.
ОтветитьУдалитьСпасибо за Вашу публикацию! Пару дней искал как самому написать админку, и вот только здесь
ОтветитьУдалитьнашел то что нужно. Будьте добры ответьте на вопрос. Как только в роуте прописываю: 'middleware'=>'auth:admin' страницы админки подвисают. Подскажите в чем может быть дело?