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

如何在Laravel中全局访问当前登录的用户,Auth::user()返回null

朱昊乾
2023-03-14

当用户登录时,会话('person_id')被设置,但是Auth::user()返回null。

这意味着我必须在需要访问用户的属性或方法的任何地方这样做:

$person  = Person::where('id', session('person_id'))->firstOrFail();

有什么更好的解决方案?我是否可以在BaseController中设置$person,然后通过$this访问用户-

我不想为每个页面上的每个请求做数据库查询。使用Laravel 8和PHP 8。

以下是我当前的登录和注册功能:

 /**
 * Handles user login
 *
 * @param  Request $request
 * @return \Illuminate\Http\RedirectResponse
 */
public function login(Request $request)
{
    $credentials = $request->validate([
        'email'    => ['required', 'email'],
        'password' => ['required'],
    ]);

    if (Auth::attempt($credentials, request('remember'))) {
        $request->session()->regenerate();

        return redirect()->intended('/account')->with('status', 'Logged in');
    }

    return back()->withErrors([
        'email' => 'The provided credentials do not match our records.',
    ]);
}

/**
 * Saves a new unverified user, sends code to their email and redirects to verify page
 *
 * @param  Request $request
 */
public function signUp(Request $request)
{
    // @todo Move to SignUpRequest file
    $request->validate([
        'email'    => 'required|email|unique:people',
        'password' => 'required',
    ]);

    $person           = new Person; 
    $person->email    = $request->email;
    $person->password = Hash::make($request->password);

    if (!$person->save()) {
        return back()->with('status', 'Failed to save the person to the database');
    }

    $request->session()->put('person_id', $person->id);

    $verification             = new Verification;
    $verification->person_id  = $person->id;
    $verification->code       = rand(111111, 999999);
    $verification->valid_from = Carbon::now();
    $verification->expires_at = Carbon::now()->addDay();

    if (!$verification->save()) {
        return back()->with('status', 'Failed to save the verification to the database');
    }

    // email stuff
    
    return redirect('/verify')->with('status', 'Successfully created account, please verify to continue');
}

共有2个答案

柯树
2023-03-14

Laravel附带全局助手auth(),您可以使用auth()访问登录用户-

颛孙飞鸾
2023-03-14

你似乎在与框架默认身份验证作斗争你使用的是另一个模型,而不是用户我建议你阅读官方文档你可以看看laravel breeze,看看他们是如何实现身份验证的如果你检查laravel breeze,你会发现你错过了Auth::login($User)

 public function store(Request $request)
    {
        $request->validate([
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'confirmed', Rules\Password::defaults()],
        ]);

        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => Hash::make($request->password),
        ]);

        event(new Registered($user));

        Auth::login($user);

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

  • 我正在使用laravel 5.4,Auth::login($user)显示类型错误: 传递给Illumb\Auth\SessionGuard::login()的参数1必须实现接口Illumb\Contracts\Authenticatable,给定的Illumb\Database\Eloquent\Builder实例,在第294行的/home/vendor/laravel/framework/sr

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

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

  • 我使用Laravel 5.2,中间件有问题。routes.php里有密码 Kernel.php: AdminPanel.php 所以,

  • 代码$清单- 在主页上,我想查看当前登录用户的清单,而不是所有用户的清单。我似乎找不到正确的代码。 检查表 用户表 HomeController的索引操作 存储来自ChecklistController的操作 用户模型 清单模型 主视图