为什么Membership.GetUser()。电子邮件返回错误的值?

时间:2014-12-05 21:21:56

标签: c# asp.net asp.net-mvc forms-authentication

我有一个MVC Web应用程序,其中ajax将表单发布到控制器方法,该方法以这样的方式开始:

[HandleError]
[AcceptVerbs(HttpVerbs.Post)]
[Authorize]
public JsonResult FormSubmitMethod (FormCollection formCol) {
    MembershipUser myObject = Membership.GetUser();
    Guid currentUserID = (Guid)myObject.ProviderUserKey; // correct guid
    string emailAddress = myObject.Email;  // incorrect email returned one time
        ...and so on

我使用Guid ProviderUserKey查找有关用户的数据并执行所有常规更新等。从myObject.Email返回的电子邮件地址用作在所有常规成功结束时发送的确认电子邮件中的收件人地址控制器方法中的事务处理。

我明白也许我应该这样做:

MembershipUser myObject = Membership.GetUser(User.Identity.Name);

也许这就是我的问题。

此代码已在生产中运行了几年,没有报告问题,并且发送了数千封成功的电子邮件确认。最近没有对代码进行任何更改。

本周我有人报告他们收到了这个控制器方法的电子邮件,当它是打算给其他人的时候。我试图弄清楚这是怎么发生的。关于发生的事情我知道的其他事实和事情:

  1. 正确的用户名在预期的IIS日志中,包括此特定的POST请求。
  2. 正确的用户数据在我预期的数据库中随处更新。因此,我得出结论,即使在这种不寻常的情况下,ProviderUserKey也是正确的。
  3. 从Membership.GetUser()返回的电子邮件地址。电子邮件是我网站其他用户的有效电子邮件地址。他们最近一直没有登录 - 自上次登录以来已经有几个月了。
  4. 有问题的两个用户彼此无关。这不是他们转发电子邮件或导致问题的情况。
  5. 已登录且应该已收到该电子邮件的用户是全新用户。他们刚刚在调用上述控制器方法之前大约10分钟注册了他们的帐户。他们在这个控制器前几分钟成功发布了一些其他形式(不是通过ajax)。实际上,他们发布的其他表格是旧式网页表单。
  6. 我正在使用SQL Server提供程序的普通旧表单身份验证。
  7. 感觉就像是一只红色的鲱鱼,但是两个用户碰巧共享相同的名字,而且这个名字的拼写有点不同寻常。他们的姓氏和其他一切都不同。
  8. 是否合理或预期Membership.GetUser()。电子邮件返回一个看似随机的用户的电子邮件地址而不是当前登录用户的电子邮件地址?如果是这样的话?

0 个答案:

没有答案