设计新用户确认(通过电子邮件验证)
Posted
技术标签:
【中文标题】设计新用户确认(通过电子邮件验证)【英文标题】:Designing an new user confirmation (verify via email) 【发布时间】:2011-04-20 08:56:45 【问题描述】:我正在开发一个 ASP.Net 应用程序,它需要验证用户是合法的而不是垃圾邮件。一旦新用户输入他们的名字、姓氏、电子邮件地址,我的应用程序将发送一封电子邮件以验证用户的真实性。该电子邮件将包含一个可以确认用户帐户的链接。
我正在寻求有关电子邮件链接背后逻辑的帮助。一旦用户点击链接,会发生什么?
我有一个使用验证码的网站,但在阻止垃圾邮件(我知道你无法阻止 100% 垃圾邮件)方面运气不佳,类似于 Stopping spammers from creating accounts (reCaptcha not doing the trick)
【问题讨论】:
【参考方案1】:正如 Rook 在下面指出的,最简单的方法是使用 Captcha。
如果您还需要验证电子邮件,请参见下文。
您可以生成一个批准 GUID 并将其传递给将用户标记为活动的电子邮件 URL。
例如,在 users 表中添加一个名为 ApprovalID 的列,并在用户注册时生成一个新的 GUID,即
您应该在此阶段将用户标记为非活动用户。
Example Guid 3F2504E0-4F89-11D3-9A0C-0305E82C3301
然后在邮件正文中传递 User Id 和 GUID
<a href="http://www.mysite.com/verify.aspx?UserId=TheUserId&ApprovalId=3F2504E0-4F89-11D3-9A0C-0305E82C3301">Verify your account</a>
然后是一个简单的页面verify.aspx
代码背后
string UserId = Request[UserId].ToString(); // You can parse these as Guids
string ApprovalId = Request[ApprovalId].ToString();
TODO:
// Get user from database
// Match QueryString ApprovalId to Column ApprovalId
// Ask user to Log In
// Set user as active
【讨论】:
我不会在查询字符串上公开用户表的数据库 ID。 @Claudio Redi SO 暴露了用户 ID……这是网络应用程序最常见的工作方式。 如果可以避免,我不会以这种方式公开它,在这种情况下还有其他方法(我可以使用 GUID 来识别待处理的激活请求)。感觉我向外界提供的信息超出了必要的范围。 用户名暴露在所有网络上,连同 Ids、Guids.. 你是说没有一个是安全的? @Marko Ivanovski:对不起,我不是那个意思。只是说,在这种情况下,特别是我可以在不传递查询字符串上的用户 ID 的情况下实现相同的目标,所以我认为,与您所支持的相关的信息越少越好,就这样:)【参考方案2】:发送确认链接并不能阻止垃圾邮件。通过电子邮件向某人发送带有Cryptographic Nonce 的链接只是确保他们可以接收电子邮件,机器人也可以接收电子邮件。
阻止垃圾邮件的最佳方法是使用 capthca,我建议使用 reCapthca。当用户注册您的服务时,您应该使用 capthca 提示用户。
【讨论】:
出于好奇,有没有人破解过reCaptcha? 没关系我发现了这个问题***.com/questions/448963/…以上是关于设计新用户确认(通过电子邮件验证)的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 Django 电子邮件确认来验证用户,但是一些用户在尝试确认他们的电子邮件时收到此错误