为什么CreateAsync(用户,密码)有时会失败? (身份v2 MVC5)

时间:2015-10-12 06:58:55

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

我使用带有Identity v2的Asp.Net MVC5进行身份验证。我为用户创建而编写的功能在开发过程中完美运行。但是,自从我几天前发布了用于制作的文章以来,我有时为CreateAsync(用户,传递)方法获取了异常。这是我的简化代码:

 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的条件是什么?

1 个答案:

答案 0 :(得分:5)

感谢@ alex-art,我能够找出问题所在。这是UserManager类中定义的规则,它不接受电子邮件/用户名中的非字母数字值。我将UserManager中的ApplicationUserManager : 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);
}