ASP.Net Identity Framework在注册后登录

时间:2015-05-07 13:21:08

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

我有以下代码尝试在用户注册后自动登录,但由于某种原因它无效。

代码命中行:

                return RedirectToAction("Index", "Home");

但由于某些原因仍然没有记录用户。我认为SignInAsync会完成它。

任何人都知道为什么它不会自动登录用户?

    // POST: /Account/Register
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser() { 
                UserName = model.Email, 
                Email = model.Email,
                FirstName = model.FirstName,
                LastName = model.LastName,
                PasswordHint =  model.PasswordHint,
                EmailConfirmed = true
            };
            IdentityResult result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                await SignInAsync(user, false);

                UserManager.AddToRole(user.Id, AppConstants.Roles.Candidate);

                //create a candidate profile for this candidate.
                ApplicationDbContext context = new ApplicationDbContext();

                var savedUser = context.Users.Single(x => x.Email == user.Email);

                savedUser.Candidate = new Candidate();

                try
                {
                    context.SaveChanges();
                }
                catch (DbEntityValidationException e)
                {
                    foreach (var eve in e.EntityValidationErrors)
                    {
                        Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                            eve.Entry.Entity.GetType().Name, eve.Entry.State);
                        foreach (var ve in eve.ValidationErrors)
                        {
                            Console.WriteLine("- Property: \"{0}\", Value: \"{1}\", Error: \"{2}\"",
                                ve.PropertyName,
                                eve.Entry.CurrentValues.GetValue<object>(ve.PropertyName),
                                ve.ErrorMessage);
                        }
                    }
                    throw;
                }

                await SignInAsync(user, isPersistent: false);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                AddErrors(result);
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

1 个答案:

答案 0 :(得分:1)

添加或更改角色或声明时,UserManager在调用UserManager.Update(user);之前不会自动保留这些更改。