gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 23:02:50 24 4
gpt4 key购买 nike

我正在尝试在我的 Laravel 5.2 应用程序中为不同类型的用户制作一个中间件。所以,我正在做的是为不同的用户制作不同的中间件。

据我所知,如果不使用来自 here 的中间件网络,Auth::check() 将无法工作。 .

所以,我所做的是-

routes.php

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

//Edit,activate,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);
}
}

内核.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

当在中间件内部调用“return Auth::user();”时,“return Auth::user();”在其他地方( View 和 Controller )工作,但不像旧版本的 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

关于php - Laravel 5.2 - 使用 Auth::check() 在 MIddleware 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34584753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com