Laravel怎么实现用户登录注册 _ Laravel Auth内置包配置方法【教程】

1次阅读

laravel 8+ 已移除 php artisan make:auth 命令,应改用 laravel/ui 或 laravel/breeze;密码须用 hash::make() 存储且字段长度不少于60;breeze 需执行 npm install 和 npm run build 才能正常加载资源。

Laravel怎么实现用户登录注册 _ Laravel Auth内置包配置方法【教程】

Laravel 8+ 默认不再带内置 UI 脚手架,php artisan make:auth 已废弃,硬套老教程会卡在路由不生效、视图找不到、密码重置报错这三类问题上。

为什么 php artisan make:auth 执行失败或没反应

这个命令只存在于 Laravel 5.2–5.7,Laravel 6 起移除,8+ 完全不可用。运行后提示 “Command ‘make:auth’ is not defined” 或静默退出,不是你环境问题,是它真没了。

  • 替代方案只有两个:laravel/ui(轻量,仅含 Blade 模板)或 laravel/breeze(带 Inertia/React/Vue 支持,推荐)
  • 别装 laravel/ui 后还去复制旧版 AuthController —— 它生成的是基于 Auth::routes() 的新路由结构,控制器逻辑已下沉到 IlluminateFoundationAuth trait 中
  • 若手动写登录逻辑,必须确保中间件顺序:路由里要显式加 middleware('web'),否则 sessioncsrf 失效,表单提交直接 419

Auth::attempt() 返回 false 但用户明明存在

最常见原因是密码没用 Hash::make() 存储,或者用了 bcrypt() 但没传参(bcrypt('') === NULL),导致数据库里存的是空字符串或明文。

  • 注册时必须用 Hash::make($request->password),不能直接存 $request->password
  • 检查数据库字段类型:password 字段必须是 VARchar(255)CHAR(60) 不够存新版 bcrypt hash
  • 如果迁移里写了 $table->String('password') 没指定长度,默认是 255,没问题;但若手改过字段长度,低于 60 就会截断 hash,验证必失败
  • 调试时可临时加一行:dd(Hash::check($request->password, $user->password)); 看比对是否通过

Breeze 安装后登录页空白或 CSS/js 不加载

这是前端资源没编译导致的,Breeze 默认不带预编译资产,npm install && npm run build 是必选项,不是可选步骤。

  • 执行 php artisan breeze:install 后,必须立刻运行 npm install,再跑 npm run build(Vite)或 npm run dev(开发模式)
  • 确认 APP_URL.env 里设置正确,比如本地是 http://localhost:8000,否则 Vite HMR 代理和 asset URL 都会出错
  • Blade 模板里引用的是 @vite(['resources/css/app.css', 'resources/js/app.js']),不是旧版 mix(),别混用
  • 清浏览器缓存,特别是启用 https 强制跳转后,HTTP 版本资源会被拦截

真正卡住人的从来不是“怎么配 Auth”,而是没意识到 Laravel 的认证机制已经从“手写控制器”转向“组合 trait + 预设路由 + 前端框架集成”。一个 Auth::attempt() 调用背后,连着 session 驱动、guard 配置、hash 算法版本、CSRF Token 生命周期四个可调点——改错其中任何一个,现象都是“登不进去”,但原因各不相同。

text=ZqhQzanResources