【问题标题】:Create and Validate Invitation Code / Token创建和验证邀请码/令牌
【发布时间】:2019-10-29 13:06:22
【问题描述】:

我正在使用 ASP.NET Core 创建一个系统来邀请用户加入群组、获得免费积分……

当邀请用户加入群组时,我创建了一个保存在数据库中的邀请:

令牌与其他信息一起保存在数据库中:

Invitation invitation = new Invitation {
  InvitationType = "JoinGroup",
  Completed = false,
  Expiry = DateTime.Now.AddDays(4),
  Token = some_token,
  Parameters = new List<Parameter> { 
    new Parameter { Name = "GroupId", Value = 22 },
    new Parameter { Name = "RoleId", Value = "Admin" },
    new Parameter { Name = "Email", Value = "someuser@name.com" },
  }
}

然后我发送一封带有 url 的电子邮件:

/invite?token=some_token

当用户访问 url 时,我会使用给定的令牌获取记录。

有了这些信息,我可以做任何我需要做的事情,例如,将用户添加到组中。

问题

我应该如何创建唯一令牌?

我应该在令牌中包含哪些信息?

我应该如何验证它?

【问题讨论】:

  • 主要基于意见.... 1. Guid.NewGuid() 2. 无 3. 通过检查它是否在数据库中(并将其设置为过期/已使用)
  • 这个问题太宽泛了。有很多方法可以解决这个问题。
  • 这是一个完全有效的问题。事实上,ASP.NET Core 有一个特定的功能。
  • @Darkonekt 你能具体说明你在说哪个功能吗?
  • 我发布了一个答案,为您指明了正确的方向。但是我没有发布任何代码,因为你还没有尝试过任何东西。但是,如果您在实施解决方案时遇到问题,我很乐意在您尝试自己的代码后提供帮助。

标签: c# asp.net-core .net-core asp.net-core-2.2 asp.net-core-identity


【解决方案1】:

ASP.NET Core Identity 提供了为不同目的生成令牌的功能。

使用 UserManager,您可以为多种目的生成令牌。

可用的方法之一是 UserManager.GenerateUserTokenAsync(TUser, String, String)。

您可以使用 UserManager.VerifyUserTokenAsync(TUser, String, String, String) 方法验证令牌。

Reference To Documentation

以下链接可帮助您入门: Identity Tokens

【讨论】:

  • 是的,我知道,事实上我有一个关于这个的问题(stackoverflow.com/questions/58606355/…)......但是当用户不存在并且您只是通过电子邮件邀请某人时,会在用户中放置什么?
  • 您可以创建用户并向用户发送带有密码重置链接的邀请电子邮件。由于您拥有电子邮件地址,因此您可以创建用户并根据该新用户在电子邮件中发送必要的令牌和链接。
  • 您还可以提示用户“完成帐户设置”或“确认帐户”
  • 不确定这是否是一个好主意......我的意思是用户 A 通过电子邮件邀请人 B,由于它不存在然后代表它创建一个帐户......听起来很奇怪。
  • 好吧,除非确认,否则不会使用该帐户。所以没关系。该帐户不需要有个人信息......只有电子邮件。一旦他们接受邀请,就会提示他们完成帐户设置。如果他们没有完成它,那么它只是您系统中的一个非活动帐户。
猜你喜欢
  • 1970-01-01
  • 2016-03-08
  • 2022-11-21
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-20
  • 2013-04-11
相关资源
最近更新 更多