database - 在旨在使用外部身份验证的系统中维护用户审计的正确方法是什么?
问题描述
我在我设计的应用程序中使用 AWS cognito 进行用户身份验证。在应用程序中需要用户审计的地方,我使用了 cognito 中的 id,就好像它是另一个表中的外键一样(我使用的是关系数据库)。尽管这可行,但这种方法在某种程度上感觉不合适。有没有其他合适的方法来设计这个?
解决方案
在我的应用程序中,用户使用他的电子邮件地址登录(常见场景)。因此,通过构造,电子邮件地址在 cognito 和我的数据库中都是唯一标识符。
我的数据库为每个新用户创建一个用户 ID,这是我在应用程序中使用的主要标识符(请注意,此标识符与 cognito 无关)。
Cognito 还为每个用户分配一个 id(它称为“用户名”),但我从不引用该 id(我也从未觉得需要引用它)。我已经从事生产好几年了,我从不后悔这个决定。
不链接用户 ID 的好处:
- 完全的灵活性(例如,我可以决定我想在我的数据库中为特定的认知用户创建一个新的用户对象。我可以保留以前的用户,例如作为备份,即使它没有链接到认知用户)。
- 更少的工作:我不需要确保我系统中的 id 与 cognito 中的一致。
不链接用户 ID 的缺点:
- 也许使用用户名字段查询 cognito 比使用电子邮件字段更快?也许这对于某些用例可能是一个优势?
推荐阅读
- r - 将散点图从 PDF 导入 R
- android - 当我从通知切换回应用程序时,为什么媒体播放器会多次播放媒体?
- c - 即使条件为假,为什么我的循环仍在运行?
- testing - 如何捕获请求标头部分中显示的 Load Runner 中的动态值?
- php - 如何在没有 SQL 的情况下允许一次加载页面
- android - 如何从 android studio 中的 recyclerview 获取选中复选框的 id?
- shake-build-system - 可以摇动生成graphviz格式的依赖图吗?
- html - 如何将屏幕截图图像适合 iPhone 框架显示
- kubernetes - 将标志更改为在 Docker for Mac 中运行的 kubernetes api-server
- c - 为什么 Linux 的 pty 驱动程序要用 NUL 代替 VEOF?