【问题标题】:Why would CreateAsync(user, password) sometimes fail? (Identity v2 MVC5)为什么 CreateAsync(user, password) 有时会失败? (身份 v2 MVC5)
【发布时间】:2015-10-12 06:58:54
【问题描述】:

我正在使用带有 Identity v2 的 Asp.Net MVC5 进行身份验证。我为创建用户而编写的函数在开发过程中运行良好。但是,由于几天前我已经发布了生产环境,因此我有时会遇到 CreateAsync(user, pass) 方法的异常。这是我的简化代码:

 var store = new UserStore<SiteUser>(dc);
 var userManager = new UserManager<SiteUser>(store);

var user = new SiteUser
                {
                    UserName = email,
                    Email = email,
                    MemberID = member.MemberID
                };
var createResult = await userManager.CreateAsync(user, rawPassword);

if (!createResult.Succeeded)
    throw new Exception("User Creation Failed - Identity Exception");

我的问题是,为什么我会有时得到这个例外?换句话说,这个CreateAsync方法会在什么条件下返回!createResult.Succeeded

【问题讨论】:

  • 你遇到了什么异常?
  • 我手动抛出异常,如上面的代码。方法只为 createResult.Succeeded 返回 false。除此之外,遗憾的是它还没有开源。
  • 您可以检查结果的Errors 属性:createResult.Errors 看看为什么它没有成功。
  • 好的,不知道谢谢。我修改了我的异常日志如下,并在我第一次看到它时发布出了什么问题:createResult.Errors.Aggregate("User Creation Failed - Identity Exception. Errors are: \n\r\n\r", (current , error) => 当前 + (" - " + error + "\n\r"));
  • 这非常有帮助,谢谢。错误信息是“用户名 XXXXX-XXX@hotmail.com 无效,只能包含字母或数字”。所以,是的,我知道问题所在。你知道我该如何改变这种行为,我需要能够接受那些连字符吗?

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


【解决方案1】:

感谢@alex-art,我能够找出问题所在。这是UserManager 类中定义的规则,它不接受电子邮件/用户名中的非字母数字值。我在ApplicationUserManager : UserManager 中扩展了UserManager 以包含

AllowOnlyAlphanumericUserNames = false

解决这个问题。

通过查看createResult.Errors 列表(@alex-art 指出),我能够确定问题所在。我通过将异常日志更改为:

if (!createResult.Succeeded)
{
    var exceptionText = createResult.Errors.Aggregate("User Creation Failed - Identity Exception. Errors were: \n\r\n\r", (current, error) => current + (" - " + error + "\n\r"));
    throw new Exception (exceptionText);
}

【讨论】:

  • 我非常感谢这里的各方,因为你们的对话拯救了我的培根。我不知道我做错了什么。同样的问题。我还会记下改进的异常日志记录!
猜你喜欢
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
  • 2015-04-24
  • 1970-01-01
相关资源
最近更新 更多