Laravel 5.6-Auth :: check()失败

时间:2018-06-23 13:28:48

标签: php laravel laravel-5 laravel-5.6

我在系统中使用了laravel spatie备份,并且所有功能(如创建新备份,删除和下载)都在本地运行。我试图将我的网站部署在免费主机上,除删除和下载功能外,其他所有功能似乎都可以正常工作。经过调查,我发现它由于我为下载/删除路由创建的中间件而失败。这是我的StaffMiddleware,只有具有职员角色的帐户才能访问它。

中间件

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 :(得分:0)

您可以尝试一下

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('/');
}

答案 1 :(得分:0)

我认为您必须从请求中吸引用户

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

    return redirect('/');
}

答案 2 :(得分:0)

您可以尝试以下方法:

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");

    }
}