将电子邮件中的链接发送给成员,返回站点时无需登录

时间:2017-10-10 18:02:35

标签: asp.net-mvc asp.net-identity

我在活动结束后向网站发送电子邮件的成员,以便他们对教师进行评分和小费。有没有办法创建一些独特的密钥,并将其包含在电子邮件链接回我的网站,以便他们可以评价和提示,而无需重新登录?如果是这样,最好的方法是什么?是否存在Asp.Net标识?

看起来Uber可能正在使用下面的提示链接,但我不确定。

  

https://gratitude.uber.com/tips/trip/33879346-bba8-406a-82a8-2afcda9aa3e7

2 个答案:

答案 0 :(得分:0)

将用户添加到数据库,然后将带有UserId的链接作为查询字符串发送:

www.mysite.co.uk/survey?id=4546

使用参数创建一个名为surveycontroller的控制器,以捕获id并指向调查html页面。

答案 1 :(得分:0)

检查this article

  

.net Framwork提供了RNGCryptoServiceProvider类   使用。实现加密随机数生成器(RNG)   由加密服务提供商(CSP)提供的实现。   该类通常用于生成随机数。虽然我可以   在某种意义上,使用此类生成唯一编号,但它也是   不要碰撞少。而且,在生成密钥时,我们可以更加关键   通过将其设为字母数字而非数字而变得复杂。   所以,我使用这个类以及一些字符掩码来生成   固定长度的唯一键。以下是代码示例:

private string GetUniqueKey() { int maxSize = 8 ; int minSize = 5 ; char[] chars = new char[62]; string a; a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; chars = a.ToCharArray(); int size = maxSize ; byte[] data = new byte[1]; RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider(); crypto.GetNonZeroBytes(data) ; size = maxSize ; data = new byte[size]; crypto.GetNonZeroBytes(data); StringBuilder result = new StringBuilder(size) ; foreach(byte b in data ) { result.Append(chars[__b % (chars.Length - )>); } <span class="code-keyword">return result.ToString(); }

正如您在评论中提到的,可能存在安全问题,您可以使用blow方法来避免它们:

  • 检查用户最后的IP地址是否知道这实际上是用户打开链接

  • 检查用户cookie

  • 为亚种bruteForce攻击创建阻止列表

  • 禁用生成的密钥,并在通过上述所有安全措施

  • 后启用它
  • 使用验证码验证来避免BruteForce或非人访问您的网页

相关问题