laravel 8+ 移除了 php artisan ui 命令,应改用 breeze:执行 composer require laravel/breeze –dev、php artisan breeze:install、npm install && npm run build 及 php artisan migrate;需确保 routes/web.php 包含 auth::routes() 和 home 路由,或修改 logincontroller 的 $redirectto;邮件需配置 mail_mailer=smtp 并清缓存;auth::check() 失败常见于 session 驱动、中间件顺序或 app_key 变更。

laravel/ui 安装后 php artisan ui vue --auth 报错“Command ‘ui’ not found”
这是 Laravel 8+ 的典型兼容问题:从 8.0 开始,php artisan ui 命令被移除,官方不再内置前端脚手架和 Auth 脚手架命令。强行运行会提示 Command "ui" is not defined。
正确路径是换用 Laravel Breeze 或 Jetstream,或者手动实现——但如果你只是想快速跑通登录注册流程,Breeze 是最轻量、最贴近旧 ui --auth 行为的选择:
- 运行
composer require laravel/breeze --dev - 执行
php artisan breeze:install(支持blade/react/vue,默认 Blade) - 跑
npm install && npm run build,再php artisan migrate
注意:breeze:install 不会覆盖已有 routes/web.php,它只追加 Auth::routes();如果之前手动删过这行,得补上。
注册成功跳转到 /home,但页面 404 或提示 “Route [home] not defined”
这是因为 Laravel 默认的认证后跳转路径依赖一个叫 home 的命名路由,而 Breeze 或手动安装后,这个路由往往没配或指向了不存在的控制器方法。
检查 routes/web.php 是否有类似这行:
Route::get('/home', [ApphttpControllersHomeController::class, 'index'])->name('home');
如果没有,要么补上(确保 HomeController 存在且有 index 方法),要么更推荐的方式是直接改跳转目标:
- 在
app/Http/Controllers/Auth/LoginController.php中修改$redirectTo属性,比如设为'/dashboard' - 或重写
authenticated()方法,返回自定义响应(适合需要鉴权判断后再跳转的场景) - 别碰
RedirectIfAuthenticated中间件里的硬编码/home,那是守门员,不是终点站
密码重置邮件发不出,本地开发用 Mailtrap 仍收不到
常见现象是点击“忘记密码”后页面无报错、无跳转,日志里也看不到发送记录——大概率是邮箱驱动没切到 smtp,或者 .env 配置项没生效。
确认三件事:
-
MAIL_MAILER必须设为smtp(不是log或Array),Laravel 7+ 已弃用MAIL_DRIVER - Mailtrap 的
MAIL_HOST、MAIL_PORT、MAIL_USERNAME、MAIL_PASSWORD要严格对应其 dashboard 提供的凭证(注意端口是 2525 还是 587) - 执行
php artisan config:clear,避免配置缓存导致 .env 修改不生效
临时验证是否通:在 Tinker 里跑 Mail::raw('test', function ($m) { $m->to('your@xxx.com'); });,比点页面更快定位是逻辑问题还是通道问题。
用户登录后 Auth::check() 返回 false,但 session()->has('login_id') 却有值
说明 Session 写进去了,但认证守卫没读到——最常见原因是 Session 驱动配置或中间件顺序错乱。
重点查这几个位置:
-
config/session.php中driver设为file或database,别用array(仅测试用,不持久) -
app/Http/Kernel.php的$middlewareGroups['web']必须包含IlluminateSessionMiddlewareStartSession::class,且它得在IlluminateAuthMiddlewareAuthenticate::class之前 - 检查路由是否真的套在
web中间件组里,比如Route::middleware('web')→group(...)漏写了,会导致 Session 不启动
还有一种隐蔽情况:APP_KEY 被改过,导致 Session 解密失败,所有已存 session 都失效。这时清空 storage/framework/sessions/ 并重启请求即可验证。
登录态这种事,靠 Auth::check() 判断才可靠,别自己读 session key——守卫封装了 guard、provider、user resolver 全链路,绕过去等于拆掉保险栓。