Laravel 中如何实现用户认证

Laravel 新项目可用当前官方 React、Vue、Svelte 或 Livewire 起始套件接入认证;介绍 Auth/Request、路由保护、登录会话更新与安全退出。

最佳实践
应用程序模块协作插画

直接回答:新项目优先使用与你安装的 Laravel 主版本对应的官方起始套件;Laravel 13 文档提供 React、Vue、Svelte 和 Livewire 选择。已有项目使用 Auth/Request 和中间件接入现有认证流程,不能把“读取当前用户”当作已实现登录。Breeze/Jetstream 应按旧项目的版本与维护需求评估,不是当前所有新项目的默认组合。

用起始套件快速生成认证

已安装官方 Laravel installer 时,新建项目并在交互步骤选择起始套件:

laravel new example-app
cd example-app
npm install
npm run build

先配置专用开发数据库,再运行 php artisan migrate;这会修改数据库结构,不能对未知或生产数据库直接执行。当前起始套件基于框架认证能力提供相应界面与流程;功能以选定套件文档为准。

Breeze 是较轻量的旧版 scaffold 方案;Jetstream 是独立套件,不是“在 Breeze 代码上追加”的安装步骤,团队功能等选项也需单独启用。不要把任一生成器直接套入已有业务项目覆盖文件。

获取当前认证用户

方式一:Auth facade

use Illuminate\Support\Facades\Auth;

$user = Auth::user();   // 当前登录用户模型实例,未登录为 null
$id   = Auth::id();     // 当前用户 ID

方式二:在控制器中类型提示 Request

use Illuminate\Http\Request;

public function show(Request $request)
{
    $user = $request->user();
}

方式三:路由闭包中

Route::get('/profile', function (Request $request) {
    return $request->user()->only(['name', 'email']);
})->middleware('auth');

保护路由

Route::middleware(['auth'])->group(function () {
    Route::get('/dashboard', [DashboardController::class, 'index']);
});

未登录访客访问 auth 中间件保护的路由会被重定向到登录页;API 场景使用 auth:sanctum。

手动认证(自定义登录逻辑时)

use Illuminate\Support\Facades\Auth;

if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) {
    $request->session()->regenerate();  // 防会话固定攻击,必须做
    return redirect()->intended('/dashboard');
}

上面是已有控制器中的局部片段,不是完整登录接口。还需校验输入、限流、CSRF 防护、错误处理以及安全 Cookie 设置。attempt() 校验框架支持的密码哈希,不要用 md5/sha1。退出时调用 Auth::logout()、$request->session()->invalidate() 和 $request->session()->regenerateToken()。

常见问题(FAQ)

Q:Breeze 和 Jetstream 怎么选?
A:先核对 Laravel 主版本及各套件支持范围。旧项目可按已有栈维护,新项目参考当前官方 starter kits,不要仅凭旧教程默认安装 Breeze/Jetstream。

Q:已有用户表,不想用起始套件重建怎么办?
A:起始套件只做 scaffold,可以只参考它生成的控制器逻辑;或直接使用 Auth::attempt()、Auth::login($user) 手动接入现有表结构,只要 User 模型实现了 Authenticatable 契约即可。

Q:Auth::user() 返回 null 但用户明明登录了?
A:先确认路由在 web 中间件组内(API 路由默认无会话),再检查 config/session.php 的 domain 配置是否导致 Cookie 没带上;SPA 前后端分离场景要用 Sanctum 的令牌或 Cookie 认证模式。

参考资料

本文依据官方资料核对,未进行现场运行测试;代码与配置示例需结合实际版本、权限和环境验证。

延伸阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台