Laravel 5.6 - Auth :: check () не работает - PullRequest
0 голосов
/ 23 июня 2018

Я использовал резервную копию laravel spatie в своей системе, и все мои функции, такие как создание новой резервной копии, удаление и загрузка, работают локально. Я попытался развернуть свой сайт на бесплатном хостинге, кажется, все работает, кроме функции удаления и загрузки. После расследования я обнаружил, что он не работает из-за промежуточного программного обеспечения, которое я создал для маршрута загрузки / удаления. Вот мое StaffMiddleware, где только учетные записи с ролью персонала могут получить к нему доступ.

Middleware

public function handle($request, Closure $next)
{

        if(Auth::check())
        {
            if(Auth::user()->role == 'staff')
            {
                return $next($request);
            }
            else
            {
                return redirect('/'); 
            }
        }
        else
        {
            return redirect('/');
        }
}

Маршруты

Route::get('backup/create', 'Admin\BackupController@create');
Route::get('backup/download/{file_name}', 'Admin\BackupController@download');
Route::get('backup/delete/{file_name}', 'Admin\BackupController@delete');

Когда я пытаюсь получить доступ к функции загрузки, она перенаправляет на домашнюю страницу, так как в моем промежуточном программном обеспечении сбой строки Auth :: check (). Обратите внимание, что я вошел в систему и прошел проверку подлинности при доступе к функции загрузки. Это происходит только на реальном сервере, но весь код работает локально. Можете ли вы помочь мне в этом? Спасибо!

Ответы [ 3 ]

0 голосов
/ 24 июня 2018

Я думаю, вам нужно получить пользователя из запроса

public function handle($request, Closure $next)
{
    if ($request->user() && $request->user()->role == 'staff')) {
        return $next($request);
    }

    return redirect('/');
}
0 голосов
/ 25 июня 2018

Вы можете попробовать это:

namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;

class AdminMiddleware {
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next,$guard = null)
    {
        if (Auth::guard($guard)->guest()) {
            if ($request->ajax() || $request->wantsJson()) {
                return response('Unauthorized.', 401);
            } else {
                return redirect('admin/login');
            }
        }else{
            if( \Auth::user()->role =="admin" ){
                return $next($request);
            }
        }
        return redirect("admin/login");

    }
}
0 голосов
/ 23 июня 2018

Можете ли вы попробовать это

public function handle($request, Closure $next)
{
    $user = Auth::user();

    //dd($user); //debug if didn't work 

    if($user && $user->role == 'staff') // if your role is coming from relation then try `$user->role->name == 'staff'`
    {
       return $next($request);
    }

    return redirect('/');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...