php – Laravel 5.2 – 使用Auth :: check()在MIddleware中不起作用

前端之家收集整理的这篇文章主要介绍了php – Laravel 5.2 – 使用Auth :: check()在MIddleware中不起作用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试为我的Laravel 5.2应用程序中的不同类型的用户制作中间件.
所以,我正在做的是为不同的用户制作不同的中间件.

据我所知,Auth :: check()如果没有从here开始调试中间件网络将无法工作.

所以,我所做的是 –

routes.PHP文件

Route::group(['middleware' => ['web','admin']],function ()
{
    //suspend,activate,delete
    Route::get('users',[
        'uses'          => 'AdminController@users','as'            => 'users'
    ]);

    //Edit,suspend,delete
    Route::get('articles',[
        'uses'          => 'AdminController@articles','as'            => 'articles'
    ]);
});

AdminMiddleware.PHP

<?PHP

namespace App\Http\Middleware;

use Closure;
use Auth;

class AdminMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request,Closure $next)
    {
        if (Auth::check())
        {
            return "asd";
            //return Auth::user();
            //return redirect('home');
        }
        else
        {
            return redirect('login');
        }

        //now return the valid request
        return $next($request);
    }
}

Kernel.PHP

protected $routeMiddleware = [
    'auth'          => \App\Http\Middleware\Authenticate::class,'admin'         => \App\Http\Middleware\AdminMiddleware::class,'user'          => \App\Http\Middleware\UserMiddleware::class,'auth.basic'    => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,'guest'         => \App\Http\Middleware\RedirectIfAuthenticated::class,'throttle'      => \Illuminate\Routing\Middleware\ThrottleRequests::class,];

AdminController.PHP

<?PHP

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class AdminController extends Controller
{
    public function users()
    {
        return view('admin.users');
    }

    public function articles()
    {
        return view('admin.articles');
    }
}

但我得到这个错误

enter image description here

当“返回Auth :: user();”时称为中间件,“返回Auth :: user();”正在其他地方工作(视图和控制器),但不像老版本的Laravel一样工作.

有人可以帮忙吗?

解决方法

您可以做这样的事情,根据需要进行调整

public function handle($request,Closure $next)
{
    $user = $request->user();

    if (! $user || $user->user_type != 'admin') {
        return redirect('login');
    }

    return $next($request);
}

您收到的错误来自于您没有从中间件返回Response对象这一事实. VerifyCsrfToken中间件正在尝试将cookie添加到通过管道传递请求所获得的响应中.在这种情况下,它不是获取Response对象而是获取字符串或User,因为在中间件中返回了字符串或User.

猜你在找的Laravel相关文章