我正在尝试研究如何构建一个数据库模式,允许我为同一个最终用户提供多个身份验证源。
例如,我的网络应用会要求用户登录以使用该应用功能的许多功能。但是,我不想负责存储和验证用户密码。
我想将此责任外包给Google,Facebook,Twitter和类似的身份提供商。
所以我仍然需要一个用户数据库表,但没有密码列。但是,这些经过身份验证不会成为我关注的问题。但我仍然需要以某种方式将我的用户与身份提供者用户ID相关联。例如,如果我的用户注册了Google,我会将用户的Google ID存储起来并将其与我的用户相关联。这意味着下次用户尝试登录并在Google上成功通过身份验证时,我会尝试在我的系统中查找具有此关联用户ID的任何用户。
我一直在努力寻找一些常见的和推荐的数据库结构,没有运气。也许我正在为此寻找错误的术语,因为我无法想象这是一种不常见的方法。 StackOverflow似乎做了类似的事情。
我想象的方式,它允许我为一个app用户关联多个身份验证源。这意味着,一旦我注册了Google,我就可以转到我的设置并关联另一个帐户,例如Facebook帐户。
我应该如何以灵活和干净的方式实现这一目标?
感谢。
答案 0 :(得分:0)
您需要知道要在数据库中保存哪些数据,以便通过第三方登录对用户进行身份验证。 例如,一旦我使用Google在我的应用中登录用户,我会在用户首次登录并在下次获取数据时保存Google用户ID。
您可以拥有一个拥有第三方提供商的实体,因此您将创建一个包含2个值的表,user_id(您的用户数据)和provider_id(Google,facebook,twitter ...)。
如果您打算只使用一个提供程序,则可以将provider_id字段添加到users表中。