我在系统中使用了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()行失败,因此它将重定向到主页。请注意,我在访问下载功能时已登录并通过身份验证。这仅在实时服务器中发生,但是所有代码都在本地工作。你能帮我这个忙吗?谢谢!
答案 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");
}
}