Php 使用openID的数据库设计是什么?

Php 使用openID的数据库设计是什么?,php,database-design,openid,janrain,Php,Database Design,Openid,Janrain,我想使用janrain作为我的登录系统,一切都准备好了,但我不知道如何构建我的数据库?使用openID的数据库设计是什么?特别是当一些用户有一些不同的提供者时,我如何知道他们是谁?他们是新用户还是旧用户?我需要一个完整的数据库设计在存储用户信息的表中为openId添加一列 一个例子如下: create table users ( first_name varchar(50), last_name varchar(50), email_address varchar(100), openId va

我想使用janrain作为我的登录系统,一切都准备好了,但我不知道如何构建我的数据库?使用openID的数据库设计是什么?特别是当一些用户有一些不同的提供者时,我如何知道他们是谁?他们是新用户还是旧用户?我需要一个完整的数据库设计

在存储用户信息的表中为openId添加一列

一个例子如下:

create table users (
first_name varchar(50),
last_name varchar(50),
email_address varchar(100),
openId varchar(150));

您还可以为openId设置索引,以便在将用户登录到应用程序时加快搜索速度。还添加了唯一约束,以便具有相同openId的用户不存在两行

您所需要的只是一个列,用于存储您正在使用的任何openId库返回的标识URL


您可以考虑把它放在一个单独的表中,该表只有“代码>标识< /代码>和<代码>用户ID 列,这样用户可以有一个以上的OpenID分配给他的帐户。

我建议您在我的应用程序中做一些事情。我在users表中有一列是布尔值。如果用户使用openID,则为1,否则为0。另一个表是opneID表,当他们使用openid时,该表提供了提供者和密钥。因此,您将有三种情况,如下所示:

  • 用户已登录,希望在下次登录时添加openID
  • 用户已注册,但希望在下次登录时使用openID
  • 用户未注册,希望使用OpenID登录
  • 这就是我所做的:

  • 详细信息已经存储,因此可以查找当前登录用户,并将openID布尔值设置为true,然后添加他将提供的openID详细信息

  • 当他点击openID时,询问他是否已经注册,是否需要电子邮件ID和密码,然后使用openID详细信息

  • (这是最难的部分)将openID设置为布尔值1,添加openID的详细信息,然后给他一个表单,该表单只要求提供适合您的应用程序的重要细节。根据应用程序的规模,您可能不需要第二个表单。我正在开发的应用程序需要用户提供额外的信息。如果您想跳过第二步,您可以查看Facebook API提供的一些选项,以检索first_name last_name等详细信息并保存
  • 因此,当用户登录时,检查OpenID布尔值是设置为0还是设置为1(如果设置为1),然后使用您可能通过正确连接保存的相应OpenID详细信息

    我发现最困难的部分是第三步,在这一步中,我不应该从使用OpenID的用户那里获取任何密码。这违反了db约束。我无法取消约束,因为这会给其他想要注册的用户带来问题。因此,我不得不以某种方式规避openID用户的约束。这可能不是最好的解决方案,但可能会对您有所帮助。
    祝你好运

    我想要一个完整的数据库设计,所以不是一个其他人编写代码或设计数据库的地方。如果你告诉我们你尝试了什么,你有什么问题,我们会帮你做的。投票结束。当你希望有人为你做所有的工作时,这可能是一个过于本地化的问题。我们在这里回答具体问题,但这里的大多数人也希望您参与解决过程,自己做一些工作。否则你将永远学不到任何东西。谢谢,我不是那个意思。我有我的db设计,但我不确定,我想知道我的用户是否有多个OPENDID,我如何匹配他们,更重要的是,我如何知道他是否(he@yahoo.com)是吗(he@gmail.com). 这是我的问题。除了要求用户添加他的OpenID或否,还有其他方法吗?