首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
Email认证-简介
Email认证-准备模型
Email认证-准备数据库
Email认证-路由
Email认证-Email 认证通知
Email认证-Email 认证处理
Email认证-重新发送 Email 认证
Email认证-保护路由
Email认证-自定义
Email认证-事件
加密解密-简介
加密解密-配置
加密解密-基本用法
哈希-介绍
哈希-配置
哈希-基本用法
哈希-哈希密码
哈希-验证密码是否与哈希值相匹配
哈希-确定密码是否需要重新哈希
重置密码-介绍
重置密码-模型准备
重置密码-数据库准备
重置密码-配置可信主机
重置密码-路由
重置密码-请求密码重置链接
重置密码-重置密码
重置密码-删除过期令牌
重置密码-自定义
数据库-简介
数据库-配置
数据库-读写分离
数据库-运行原生 SQL 查询
数据库-使用多个数据库连接
数据库-监听查询事件
数据库-监控累计查询时间
数据库-数据库事务
数据库-连接到数据库 CLI
数据库-检查数据库
数据库-监控数据库
当前位置:
首页>>
技术小册>>
Laravel(10.x)从入门到精通(十五)
小册名称:Laravel(10.x)从入门到精通(十五)
### Email认证 - 准备数据库 在构建基于Laravel 10.x的应用时,用户认证是不可或缺的一部分,而Email认证作为现代Web应用中最常见的用户验证方式之一,其重要性不言而喻。本章节将深入探讨如何在Laravel项目中为Email认证功能准备数据库,确保你的应用能够安全、高效地管理用户信息及其验证状态。 #### 一、引言 Laravel框架提供了强大的认证系统,称为Laravel Breeze或Laravel Jetstream(取决于你的Laravel版本及偏好),它们内置了多种认证机制,包括Email验证。然而,无论使用哪种认证脚手架,背后都离不开一个精心设计的数据库结构来存储用户信息和验证状态。 #### 二、数据库设计原则 在开始设计数据库之前,我们需要明确几个关键原则: 1. **数据最小化**:只存储必要的信息,减少潜在的安全风险。 2. **可扩展性**:设计时应考虑未来可能的需求变更,如添加新的用户属性或验证类型。 3. **一致性**:确保数据库中的数据格式和命名规则保持一致,便于管理和维护。 4. **性能优化**:合理设计索引和查询,以提高数据检索和更新的效率。 #### 三、核心数据表设计 对于Email认证,我们主要需要关注两个数据表:`users`和(可选的)`email_verifications`。 ##### 1. `users` 表 这是存储用户基本信息的核心表,通常包含以下字段: - `id`:主键,自增ID。 - `name`:用户的名字。 - `email`:用户的电子邮件地址,唯一标识。 - `email_verified_at`:Email验证时间戳,如果Email已验证,则记录验证时间;否则为NULL。 - `password`:用户的加密密码。 - `remember_token`:用于“记住我”功能的令牌(可选)。 - `created_at` 和 `updated_at`:记录创建和最后更新时间的时间戳。 示例SQL语句(基于MySQL): ```sql CREATE TABLE `users` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `email_verified_at` timestamp NULL DEFAULT NULL, `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `users_email_unique` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ``` ##### 2. `email_verifications` 表(可选) 虽然Laravel的内置认证系统通常不需要单独的`email_verifications`表来跟踪验证状态(因为`email_verified_at`字段已经足够),但在某些复杂场景下(如需要记录验证尝试次数、验证链接有效期等),你可能需要创建这样的表。 假设我们需要这样一个表,其结构可能如下: - `id`:主键,自增ID。 - `user_id`:外键,关联到`users`表的`id`字段。 - `token`:用于验证的唯一令牌。 - `expires_at`:验证链接的过期时间。 - `created_at` 和 `updated_at`:记录创建和最后更新时间的时间戳。 示例SQL语句: ```sql CREATE TABLE `email_verifications` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT, `user_id` bigint unsigned NOT NULL, `token` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `expires_at` timestamp NOT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), KEY `email_verifications_user_id_foreign` (`user_id`), CONSTRAINT `email_verifications_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ``` #### 四、Laravel中的实现 在Laravel中,你可以使用Artisan命令快速生成用户认证所需的数据表(默认情况下,不包括`email_verifications`表,因为它不是Laravel认证系统的标准部分)。 1. **迁移文件创建**: 如果你使用的是Laravel Breeze或Jetstream,它们通常会自带必要的迁移文件来创建`users`表。如果没有,你可以通过Laravel的迁移系统手动创建。 2. **迁移运行**: 使用Artisan命令`php artisan migrate`来运行迁移,这将根据你的迁移文件在数据库中创建相应的表。 3. **自定义验证逻辑**: 如果你需要额外的验证逻辑(如使用`email_verifications`表),你需要在相应的模型(如`User`模型)中定义方法或使用事件监听器/观察者来处理这些逻辑。 4. **Email验证流程**: Laravel的认证系统提供了Email验证的内置支持。在创建用户时,可以自动生成一个验证令牌并发送到用户的Email地址。用户点击链接后,系统会验证令牌并更新`email_verified_at`字段。 #### 五、安全考虑 - **密码加密**:确保所有存储的密码都经过哈希加密处理,Laravel默认使用Bcrypt算法。 - **令牌安全**:对于Email验证令牌,确保它们足够复杂且难以预测,同时设置合理的过期时间。 - **HTTPS**:在整个认证过程中使用HTTPS,以保护敏感数据不被拦截。 - **输入验证**:对用户输入进行严格的验证,防止SQL注入等安全问题。 #### 六、总结 在Laravel 10.x中准备用于Email认证的数据库是一个涉及数据库设计、Laravel迁移、以及安全考虑的综合过程。通过遵循上述步骤和原则,你可以构建一个既安全又高效的用户认证系统。记得,随着应用的发展,你可能需要回顾并调整你的数据库设计,以适应新的需求和挑战。
上一篇:
Email认证-准备模型
下一篇:
Email认证-路由
该分类下的相关小册推荐:
PHP8入门与项目实战(1)
PHP8入门与项目实战(2)
HTTP权威指南
全栈工程师修炼指南
Laravel(10.x)从入门到精通(十七)
PHP合辑2-高级进阶
Laravel(10.x)从入门到精通(四)
PHP8实战小册
Magento零基础到架构师(目录管理)
PHP安全之道
PHP程序员面试算法宝典
Laravel(10.x)从入门到精通(一)