加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 19:42:43 所属栏目:大数据 来源:网络整理
导读:我正在尝试为我的Laravel 5.2应用程序中的不同类型的用户制作中间件. 所以,我正在做的是为不同的用户制作不同的中间件. 据我所知,Auth :: check()如果没有从here开始调试中间件网络将无法工作. 所以,我所做的是 – routes.php文件 Route::group(['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 AppHttpMiddleware;

use Closure;
use Auth;

class AdminMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  IlluminateHttpRequest  $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'          => AppHttpMiddlewareAuthenticate::class,'admin'         => AppHttpMiddlewareAdminMiddleware::class,'user'          => AppHttpMiddlewareUserMiddleware::class,'auth.basic'    => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class,'guest'         => AppHttpMiddlewareRedirectIfAuthenticated::class,'throttle'      => IlluminateRoutingMiddlewareThrottleRequests::class,];

AdminController.php

<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;

use AppHttpRequests;
use AppHttpControllersController;

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读