public ActionResult Register(RegisterViewModel model) { if (ModelState.IsValid) { // Attempt to register the user try { var user = Context.Users.Where(u => u.UserName.ToUpper() == model.UserName.ToUpper()).FirstOrDefault(); if (user != null) { ModelState.AddModelError("", "Username is already used"); return View(model); } user = new User() { UserName = model.UserName, Pass = model.Pass, Roles = new List<Role>() }; var role = Context.Roles.Where(r => r.RoleName == "User").FirstOrDefault(); user.Roles.Add(role); Context.Users.Add(user); Context.SaveChanges(); var roles = user.Roles.Select(m => m.RoleName).ToArray(); CustomPrincipalSerializeModel serializeModel = new CustomPrincipalSerializeModel(); serializeModel.UserID = user.UserID; serializeModel.Roles = roles; string userData = JsonConvert.SerializeObject(serializeModel); FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket( 1, user.UserName, DateTime.Now, DateTime.Now.AddMinutes(15), false, userData); string encTicket = FormsAuthentication.Encrypt(authTicket); HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket); Response.Cookies.Add(faCookie); if (roles.Contains("Admin")) { return RedirectToAction("Index", "Admin"); } else { return RedirectToAction("Index", "Book"); } } catch { ModelState.AddModelError("", "Cannot create user account"); } } // If we got this far, something failed, redisplay form return View(model); }