0

我有一个Users表来存储用户详细信息和密码,并且应用程序的身份验证可以很好地处理这个问题。

但是我们想在我们的系统中集成FacebookGoogle登录,所以请告知相关的架构修改。

创建表 dbo.Users(
    UserId int IDENTITY(1, 1) 主键,
    UserTypeId int, -- Admin = 1, End User = 2。(我们为此有一个主表,但为简单起见,此处省略)
    用户名 nvarchar(16) 非空唯一,
    用户密码 nvarchar(16),
    名字 nvarchar(64),
    姓氏 nvarchar(64),
    DateOfBirth 日期,
    性别字符(1),
    电话号码 nvarchar(16),
    电子邮件 nvarchar(128) 唯一,
    IsActive 位,
    UpdateTime datetime 默认 CURRENT_TIMESTAMP )

这就是我的想法:
1)一旦用户从 Facebook 或 Google 进行身份验证,那么应用程序将拥有声明(emailId)
2)应用程序应验证用户表中的 emailId 存在,如果存在,它将允许登录。

Q1> 那么这是否需要对用户表中的现有行进行任何更新?
Q2> 如果用户记录不存在(基于 emailId 声明记录),那么我认为我们应该在 users 表中添加新记录?
Q3> 如果添加:用户名和密码值是什么?
Q4> 用户(添加的记录)可以在没有Facebook登录的情况下进行正常登录吗?

谢谢。

4

1 回答 1

2

为了接受 OpenID 登录,您必须接受并存储用户的 OpenID-URL。该 URL 可以像电子邮件地址一样识别用户。

Q1:取决于:如果您希望同一用户同时允许 OpenID 登录和正常登录,则必须在表中添加另一列。如果您不允许混合登录,您可以使用您的Email列来存储 OpenID URL。

Q2:是的,如果您看到一个新的 OpenID-URL,请像处理未知电子邮件地址一样处理它

Q3:您必须要求用户选择一个用户名——我假设您对当前用户也这样做。如果您想允许同一用户同时登录,则必须要求用户设置密码 - 否则他们只能通过其 OpenID 提供商登录。

Q4:仅当您确实要求提供用户名和密码时(请参阅 Q3)

请注意,允许同一用户通过 OpenID 登录并使用传统的用户名/密码会带来潜在的安全问题:用户可能不会明白您是在要求他们设置密码并输入他们的 Facebook(或 Google)密码。或者他们可能只是不在乎并在任何地方使用相同的密码。如果他们这样做并且您的数据库没有正确加密密码,您的数据库将存储 Facebook 名称未加密的密码......即使只有 10% 的人在您的网站上使用相同的密码 - 想象一下他们可以用它做什么。

于 2013-03-09T18:15:06.247 回答