当前位置: 首页 > 知识库问答 >
问题:

Auth::user()返回null

陆安国
2023-03-14

我使用Laravel 5.2,中间件有问题。routes.php里有密码


    use Illuminate\Contracts\Auth\Access\Gate;


    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' => \App\Http\Middleware\AdminPanel::class,
    ];

AdminPanel.php


    namespace App\Http\Middleware;


    use Closure;
    use Illuminate\Support\Facades\Auth;
    use App\Role;

    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('/');
        }

所以,

$user = Auth::user()

共有3个答案

古棋
2023-03-14

在控制器的构造函数中定义中间件,它将在这里完成任务

public function __construct()
{
    $this->middleware('auth:api');
}
田兴旺
2023-03-14

任何使用Auth()的路由都必须封装在web中间件中。很接近,只需移动Route::group(['prefix'=

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');
        });
    });
});

翟柏
2023-03-14

我遇到了一种情况,即Auth::user()总是返回null,这是因为我试图在控制器的构造函数中获取用户。

我意识到您无法访问控制器构造函数中经过身份验证的用户,因为中间件尚未运行。

作为一种选择,您可以直接在控制器的构造函数中定义基于闭包的中间件。

namespace App\Http\Controllers;

use App\User;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;

class ProjectController extends Controller
{
    protected $user;

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware(function ($request, $next) {

            $this->user = Auth::user();

            return $next($request);
        });
    }
}

 类似资料:
  • 我在Laravel中创建了多重身份验证。当我使用用户登录时,在post login方法中调试时,在Auth::guard('user')之后- 如何解决?我是拉威尔的初学者。 谢谢!!! /路由/auth/user。php }); /路由/网络。php }); /app/Controllers/User/Auth/LoginController-@post登录 /应用程序/控制器/用户/家庭控制器

  • 我设置了一个自定义的警卫和登录控制器 登录很好,但不知怎么的,它没有存储经过身份验证的用户 我读过这个"Auth::user()在Laravel 5.2中返回null" 并且这个"Auth::user()返回null" 但我认为我的问题与中间件无关 代码如下: 控制器: 型号: config/auth.php: 路线表: 我还尝试将此添加到控制器: 当我试图从视图访问Auth::user()时,它

  • 我搜索并找到了如下各种结果:auth()- 但是,我的仍然不起作用。 在控制器中工作,但在模型中不工作。它返回。 代码是: 我尝试,它也返回。 任何想法?

  • nest-user-auth If this project helps you, please add a star! If you see an issue, please post it! This project uses NestJS, GraphQL, and MongoDB. This project implements user authentication. Adding ot

  • 我有一个函数 当我dd时,即使我在控制器上声明了auth facade,它也会返回null 这是我的路线,它存储在

  • 问题: 在我的索引页面上,经过身份验证的用户和来宾应该能够查看和使用该页面,除非他们想保存某些内容。我试图登录以便保存数据,但被重定向到一个经过身份验证的页面,这是一个配置文件页面。我尝试在配置文件页上转储,它返回用户登录的数据,尝试在索引页上再次转储,然后返回null 我正在使用最新版本的Laravel。 我在谷歌上搜索了一些与我遇到的问题相同的问题,最接近的问题是Auth::user()返回n