Facebook、谷歌和我自己的身份验证的数据库模式

标签 database facebook authentication database-design google-plus

我想完成与 this question 几乎相同的事情,这是为了存储来自多个来源(Facebook、Twitter、我自己的应用程序等)的身份验证数据,以便一个人可以从任何/所有提到的提供商登录他们的帐户。

接下来,我发布了我创建的两个表的屏幕截图。

Database Schema

“identity”表将负责存储登录方法(Facebook、Google 或我自己的登录系统)。一个用户可以有一个或多个“身份”。

在“identity”表中,“adapter”列将存储身份验证方法(facebook、google、myapp)。 “hash”列将存储身份验证方法的 ID(对于 Google 或 Facebook),或者如果它是我自己的应用程序身份验证方法的记录,“hash”列将存储使用 SHA1 加密的用户注册密码。

例如,我的问题是:如何检测通过 Facebook 帐户进行身份验证的用户是否还没有使用其他身份验证方法创建的“用户”?因为我不想为同一个社交身份验证帐户所有者或我自己的应用程序帐户所有者创建多个用户。 我可以使用电子邮件栏来解决这个问题吗?所以我可以验证身份验证用户是否已经在“用户”表中注册了相同的电子邮件,如果有,那么我可以使用相同的 user_id 创建身份吗?

最佳答案

如果可能,我建议您在添加身份 ID 之前先添加用户。 在创建用户之前检查是否存在匹配的电子邮件,然后添加新身份。

我本来认为应该对用户在创建之前存在的身份进行约束。否则,您可能会在根本没有连接用户的情况下将“身份”添加到数据库中。

关于Facebook、谷歌和我自己的身份验证的数据库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31072146/

相关文章:

javascript - 如果不发送数据,Ajax 请求将无法工作

database - Laravel 5.2 - 从 Controller 创建数据库表

facebook - 你如何在 Facebook 页面上发布到墙上(不是个人资料)

facebook - OG :description not getting shown

android - "An error' s 发生 "when authenticating with Facebook' s android sdk

java - Spring Security - 未调用自定义身份验证提供程序

node.js - 如何使用 API key 保护 REST API

java - coSTLy 如何在连接池中打开和关闭数据库连接?

database - 蟾蜍的替代品

javascript - 循环中的异步调用延迟