Laravel怎么实现用户登录注册_Laravel内置Auth系统快速使用【实战】

2次阅读

laravel内置auth系统需手动执行命令生成登录注册页面,5.7及更早版用php artisan make:auth,5.8+已移除,8+需通过laravel/ui包实现;auth::attempt()失败不报错,常见原因包括password字段缺失或未加密、守卫配置错误;注册后auth::user()为NULL多因web中间件缺失startsession和encryptcookies;密码重置邮件发送失败常因配置未生效或缓存未清除。

Laravel怎么实现用户登录注册_Laravel内置Auth系统快速使用【实战】

Laravel 的内置 Auth 系统不是“开箱即用”的完整登录注册页面,而是提供了一套可快速 scaffold 的脚手架——你得主动执行命令生成视图和路由,否则访问 /login 会直接 404。

运行 php artisan make:auth 前必须确认 Laravel 版本

这个命令在 Laravel 5.7 及更早版本中有效;从 Laravel 5.8 开始被移除,6.x/7.x 完全废弃。如果你用的是 Laravel 8+,它已由 laravel/ui 包接管,需先安装:

  • composer require laravel/ui
  • 再执行 php artisan ui bootstrap --auth(或 vue/react
  • 最后运行 npm install && npm run dev 编译前端资源

跳过这步直接跑 make:auth,控制台会报错 Command "make:auth" is not defined

Auth::attempt() 失败却没报错?检查字段和守卫配置

Auth::attempt() 返回 false 时不会抛异常,容易误以为逻辑卡住。常见原因有:

  • 数据库users 表缺少 password 字段,或该字段不是 varchar(255)
  • 用户密码没用 Hash::make() 加密(注册时漏了),导致比对失败
  • 当前守卫(guard)不是 web,比如你在 API 场景下误用了 Auth::guard('api')->attempt(...),但中间件没配 auth:api
  • config/auth.php'providers' => ['users' => [... 'model' => AppModelsUser::class]] 指向的模型没实现 Authenticatable 接口(Laravel 8+ 默认已实现,老项目需手动加)

注册后自动登录,但 Auth::user() 是 null?中间件顺序错了

典型场景:注册成功后想直接重定向到首页并显示欢迎信息,结果 Auth::user()null。这不是认证失败,而是请求没经过 StartSessionEncryptCookies 中间件。

检查 app/http/Kernel.php$middlewareGroups['web'] 是否包含:

  • AppHttpMiddlewareEncryptCookies::class
  • IlluminateSessionMiddlewareStartSession::class
  • IlluminateViewMiddlewareShareErrorsFromSession::class

如果自定义了中间件组或覆盖了 web,漏掉其中任一,Session 就无法写入,认证状态就丢失。

密码重置邮件发不出?别只改 .env,还要清缓存

改完 MAIL_MAILER=smtpMAIL_HOST=... 后仍收不到邮件,大概率是配置没生效:

  • 运行 php artisan config:clear(仅清配置缓存)
  • 更彻底的做法:连带清空 bootstrap/cache/config.php 文件
  • 确保 AppModelsUser 实现了 MustVerifyEmail 接口(如果启用了邮箱验证)
  • Laravel 9+ 默认使用 verify-email 路由名,测试时注意 URL 是否匹配 /email/verify/{id}/{hash}

真实项目里,最容易被跳过的其实是中间件顺序和配置缓存这两步——它们不报错,但让整个 Auth 流程静默失效。

text=ZqhQzanResources