我应该使用用户名或用户ID来引用ASP.NET中经过身份验证的用户

csm*_*mba 30 asp.net authentication

所以在我的简单学习网站中,我使用内置的ASP.NET身份验证系统.

我现在添加一个用户表来保存像他的拉链,DOB等东西.我的问题是:

  1. 在新表中,密钥应该是用户名(字符串)还是用户ID,这是用户在ID中查找的编号asp_ tables.
  2. 如果最好的做法是使用那个丑陋的guid,有谁知道如何获得它?它似乎不像名称那样容易访问(System.Web.HttpContext.Current.User.Identity.Name)
  3. 如果您建议我不使用(不是ASP.NET身份验证提供的guid和userName字段),那么如何使用ASP.NET身份验证呢?我喜欢的一个选项是使用用户的电子邮件地址作为登录,但是如何使ASP.NET身份验证系统使用电子邮件地址而不是用户名?(或者那里没什么可做的,只是我决定我"知道"userName实际上是一个电子邮件地址?

请注意:

  • 我不是在询问如何在.NET中获取GUID,我只是在指向asp_ tablesas guid中的userID列.
  • 用户名在ASP.NET身份验证中是唯一的.

Mik*_*one 31

您应该使用一些唯一的ID,您提到的GUID或其他一些自动生成的密钥.但是,该号码永远不会对用户可见.

这样做的一个巨大好处是,您的所有代码都可以处理用户ID,但用户的名称并不真正依赖于它.然后,用户可以更改他们的名字(我发现在网站上有用).如果您使用电子邮件地址作为用户的登录信息,这将非常有用...这对用户来说非常方便(那么他们不必记住20个ID,以防他们的普通用户ID是一个流行的用户ID).


pal*_*sey 23

您应该使用UserID.它是MembershipUser的ProviderUserKey属性.

Guid UserID = new Guid(Membership.GetUser(User.Identity.Name).ProviderUserKey.ToString());
Run Code Online (Sandbox Code Playgroud)


Gat*_*ler 13

如果用户名是唯一的,我会建议使用用户名作为表中的主键,这有几个很好的理由:

  1. 主键将是聚簇索引,因此通过用户名搜索用户详细信息将非常快.
  2. 它将阻止重复的用户名出现
  3. 您不必担心使用两种不同的信息(用户名或guid)
  4. 它将使编写代码变得更加容易,因为不必查找两位信息.

  • 使用用户名的关键问题是用户是否因某种原因想要更改用户名.如果您使用用户名,则必须更改多个表而不是一个.注意:发表此评论然后在下面阅读并看到其他人提到这一点. (9认同)
  • 当用户名可以随时间重用时,会出现其他潜在问题.例如,假设您在自定义授权模型中使用用户名.用户ASmith被指定为管理员.然后他离开公司,他的用户记录被删除.新用户加入公司并被分配用户名ASmith.您可能只是在没有意识到的情况下给用户管理员访问权限. (7认同)

jde*_*tor 5

我会使用userid.如果您想使用用户名,您将使"更改用户名"功能非常昂贵.