Auth::user() 返回 null [英] Auth::user() returns null
本文介绍了Auth::user() 返回 null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用 Laravel 5.2,中间件有问题.代码在routes.php
<前>使用 IlluminateContractsAuthAccessGate;Route::group(['middleware' => 'web'], function () {路线::认证();Route::get('/', 'HomeController@index');});Route::group(['prefix'=>'admin', 'middleware' => 'admin'], function(){路由::get('/', function(){返回视图('admin.index');});路线::获取('/用户',功能(){返回视图('admin.user');});});内核.php:
<前>受保护的 $routeMiddleware = [...'admin' => AppHttpMiddlewareAdminPanel::class,];AdminPanel.php
<前>命名空间 AppHttpMiddleware;使用闭包;使用 IlluminateSupportFacadesAuth;使用 AppRole;类管理面板{公共函数句柄($request, Closure $next){$user = Auth::user();dd($用户);如果($用户){$role = Role::whereName('admin')->first();if($user->hasRole($role)){返回 $next($request);}}返回重定向('/');}所以,
$user = Auth::user
()
总是返回 null.感谢您的建议!
解决方案
任何使用 Auth()
的路由都必须封装在 web
中间件中.您已经接近了,只需将您的 Route::group(['prefix' => 'admin'], ...)
移动到上面的组中即可.
Route::group(['middleware' => 'web'], function () {路线::认证();Route::get('/', 'HomeController@index');//移到这里将确保会话、csrf 等都包含在所有这些路由中Route::group(['prefix'=>'admin', 'middleware' => 'admin'], function(){路由::get('/', function(){返回视图('admin.index');});路线::获取('/用户',功能(){返回视图('admin.user');});});});
I use Laravel 5.2 and have a problem with middleware. There is the code in the routes.php
use IlluminateContractsAuthAccessGate; Route::group(['middleware' => 'web'], function () { Route::auth(); Route::get('/', 'HomeController@index'); }); Route::group(['prefix'=>'admin', 'middleware' => 'admin'], function(){ Route::get('/', function(){ return view('admin.index'); }); Route::get('/user', function(){ return view('admin.user'); }); });
Kernel.php:
protected $routeMiddleware = [ ... 'admin' => AppHttpMiddlewareAdminPanel::class, ];
AdminPanel.php
namespace AppHttpMiddleware; use Closure; use IlluminateSupportFacadesAuth; use AppRole; class AdminPanel { public function handle($request, Closure $next) { $user = Auth::user(); dd($user); if($user){ $role = Role::whereName('admin')->first(); if($user->hasRole($role)){ return $next($request); } } return redirect('/'); }
So,
$user = Auth::user
()
always return null. Thanks for suggestions!
解决方案
Any route that uses Auth()
must be encapsulated in the web
middleware. You're close, just move your Route::group(['prefix' => 'admin'], ...)
into the group above.
Route::group(['middleware' => 'web'], function () {
Route::auth();
Route::get('/', 'HomeController@index');
// Moving here will ensure that sessions, csrf, etc. is included in all these routes
Route::group(['prefix'=>'admin', 'middleware' => 'admin'], function(){
Route::get('/', function(){
return view('admin.index');
});
Route::get('/user', function(){
return view('admin.user');
});
});
});
这篇关于Auth::user() 返回 null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文