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

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()的新路由结构,控制器逻辑已下沉到IlluminateFoundationAuthtrait 中 - 若手动写登录逻辑,必须确保中间件顺序:路由里要显式加
middleware('web'),否则session和csrf失效,表单提交直接 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 生命周期四个可调点——改错其中任何一个,现象都是“登不进去”,但原因各不相同。