Как перенаправить префикс маршрута на другой маршрут в laravel? - PullRequest
0 голосов
/ 12 декабря 2018

Я использую Laravel 5.7.Пожалуйста, смотрите мой код:

web.php

Route::prefix('admin')->group(function () {
        Route::get('/', function () {
           return redirect()->route('admin.check');
       });
Route::get('/check-auth', 'Admin\AdminController@checkAuth')->name('admin.check');
});

AdminController::checkAuth()

public function checkAuth()
    {
        if(true == Auth::guard('admin')->user()){
            return redirect()->route('cs.dashboard');
        } else{
            return redirect()->route('admin.login');
        }
    }

Я создалгруппа маршрутов с префиксом admin.

Что мне нужно, когда я использую url localhost:8000/admin, тогда он должен проверить Auth администратора, если пользователь вошел в систему, то он должен показать панель администратора, в противном случае перенаправлениеему на страницу входа администратора: localhost:8000/admin/login но проблема здесь в том, что я получаю ошибку apache, которая гласит:

Not Found
The requested resource /admin was not found on this server.

Я также попытался с помощью файла htaccess поместить его в местоположение root/public/admin, это несколько решило мою проблемупроблема, но я должен использовать этот URL.

localhost:8000/index.php/admin

и мне не нужен index.php в моем URL.

Вот как выглядит мой файл .htaccess:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Пожалуйста, помогите мне решить эту проблему.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Я думаю, что лучший способ - использовать Middleware для проверки, является ли пользователь, вошедший в систему, администратором или нет ... и это сделает ваш код более элегантным, чем сейчас. Вам нужно только сделать промежуточное ПО, чтобы проверить, является ли он администратором илине .. если это админ, тогда верните $next($request), если не перенаправить на другую страницу .. затем измените свой код ..

 Route::prefix('admin')->group(function () {
        Route::get('/', 'AdminController@index');
});

Затем создайте контроллер администратора и добавьте функцию индекса, такую ​​как

public function __construct()
{
    $this->middleware('admin');
}

public function index()
{
    return view('adminpage');
}
0 голосов
/ 12 декабря 2018

Обычный способ проверить, аутентифицирован ли пользователь, это Промежуточное программное обеспечение

В вашем случае check-auth запускается, когда вы переходите к: localhost:8000/admin/ или localhost:8000/admin/check-auth, иначе laravel не будет проверятьаутентификация.

Пожалуйста, посмотрите на промежуточное ПО Laravel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...