Laravel中间件将用户信息返回为null
我创建了一个中间层,以防止用户不插入或更新任何内容。我在拉威尔5.6频道Laravel中间件将用户信息返回为null,laravel,authentication,laravel-5,middleware,Laravel,Authentication,Laravel 5,Middleware,我创建了一个中间层,以防止用户不插入或更新任何内容。我在拉威尔5.6频道 <?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth; class LimitDemoUser { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class LimitDemoUser
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$userId = Auth::id();
if(request()->method() != "GET" && request()->method() != "HEAD" && $userId == 6) {
abort(403);
}
return $next($request);
}
}
但是当我dd(Auth::id())时;我得到的是null而不是loggedin用户id
我错过了什么
我想我不必在RouteMiddle软件中添加任何内容
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
我的登录控制器在下面。也许会有帮助
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/login';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
public function logout()
{
$this->guard()->logout();
return redirect()->route('login');
}
}
您的登录控制器应如下所示:
class LoginController extends Controller
{
/**
* Handle an authentication attempt.
*
* @return Response
*/
public function authenticate()
{
if (Auth::attempt(['email' => $email, 'password' => $password])) {
// Authentication passed...
return redirect()->intended('dashboard');
}
}
}
当您想要获得用户id时,您应该访问用户类
if (Auth::check())
{
// The user is logged in...
Auth::user()->id;
}
else
{
echo "You are not logged in";
}
尝试将web.php更改为
Route::middleware(['limitdemouser'])->group(function () {
Auth::routes();
});
你的$RouteMiddle软件是
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'limitdemouser' => \App\Http\Middleware\LimitDemoUser::class,
];
如果不起作用,请告诉我。我在本页找到了解决方案。
OP声明
i have added the following code in the global middleware and nou is het working
\App\Http\Middleware\EncryptCookies::class, \Illuminate\Session\Middleware\StartSession::class,
它很脏,但它起作用了。我不认为这是最好的做法,但它解决了问题。既然我们发现了问题,有人能从这里提出一个合适的解决方案吗?将\App\Http\Middleware\LimitDemoUser::class
添加到web
中间件组数组的末尾
protected $middlewareGroups = [
'web' => [
...,
\App\Http\Middleware\LimitDemoUser::class,
]
];
你的路线代码是什么我没有在$RouteMiddle软件中添加任何内容,是吗?你的web.php文件$userId=Auth::user()->id@afsalc对于登录我只有Auth::routes();我试图获取非对象错误dd的属性(Auth::user())也返回null是的,它表示您未登录,但我已登录:)我是否应该向中间件声明我已登录的内容?@SNaRe,您确定您已登录吗?是的,因为当我删除其他内容时,我进入了我已登录的页面umm!你的问题是你的日志控制器。在你写这篇文章之前,我只是尝试一下。但它也不起作用。这对Laravel 5.8不起作用。我也有同样的问题。对我来说最好的答案是:解决了我非常相似的问题。
protected $middlewareGroups = [
'web' => [
...,
\App\Http\Middleware\LimitDemoUser::class,
]
];