Example #1
0
 public void NullErrorListUsesDefaultError()
 {
     var result = new IdentityResult(null);
     Assert.False(result.Succeeded);
     Assert.Equal(1, result.Errors.Count());
     Assert.Equal("An unknown failure has occured.", result.Errors.First());
 }
 public static void IsFailure(IdentityResult result, IdentityError error)
 {
     Assert.NotNull(result);
     Assert.False(result.Succeeded);
     Assert.Equal(error.Description, result.Errors.First().Description);
     Assert.Equal(error.Code, result.Errors.First().Code);
 }
Example #3
0
 public void VerifyDefaultConstructor()
 {
     var result = new IdentityResult();
     Assert.False(result.Succeeded);
     Assert.Equal(1, result.Errors.Count());
     Assert.Equal("An unknown failure has occured.", result.Errors.First());
 }
        public static IdentityResult AuthenticateIdentity(string url, string userName, string apiKey)
        {
            IdentityResult result = new IdentityResult();

              // this is what we are sending
              string post_data = "{ \"auth\":{ \"RAX-KSKEY:apiKeyCredentials\":{ \"username\":\"YYYYYYYYYYYY\", \"apiKey\":\"XXXXXXXXXXXX\" } } }";
              post_data = post_data.Replace("YYYYYYYYYYYY", userName);
              post_data = post_data.Replace("XXXXXXXXXXXX", apiKey);

              // this is where we will send it

              // create a request
              HttpWebRequest request = (HttpWebRequest)
              WebRequest.Create(url); request.KeepAlive = false;
              request.ProtocolVersion = HttpVersion.Version10;
              request.Method = "POST";

              // turn our request string into a byte stream
              byte[] postBytes = Encoding.ASCII.GetBytes(post_data);

              try
              {
            // this is important - make sure you specify type this way
            request.ContentType = "application/json";
            request.ContentLength = postBytes.Length;
            Stream requestStream = request.GetRequestStream();

            // now send it
            requestStream.Write(postBytes, 0, postBytes.Length);
            requestStream.Close();

            // grab the response and print it out to the console along with the status code
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            result.reply = new StreamReader(response.GetResponseStream()).ReadToEnd();

            // parse out the token ID and tenant ID
            string tokentext = "\"token\":{\"id\":\"";
            result.token = GetJsonValue(tokentext, result.reply, 32);
            string tenanttext = "\"tenant\":{\"id\":\"";
            result.tenant = GetJsonValue(tenanttext, result.reply, 7);
            string expirestext = "\"expires\":\"";
            string expiresat = GetJsonValue(expirestext, result.reply, 19);
            result.expires = DateTime.Parse(expiresat);

            return result;
              }
              catch (System.Net.WebException e)
              {
            MessageBox.Show(e.ToString(), "Authentication Failure", MessageBoxButtons.OK);
              }

              result.token = result.tenant = "";
              return result;
        }
        public async Task <AjaxResult> ConfirmEmail(ConfirmEmailDto dto)
        {
            if (!ModelState.IsValid)
            {
                return(new AjaxResult("邮箱激活失败:参数不正确", AjaxResultType.Error));
            }

            User user = await _userManager.FindByIdAsync(dto.UserId.ToString());

            if (user == null)
            {
                return(new AjaxResult("注册邮箱激活失败:用户不存在", AjaxResultType.Error));
            }

            if (user.EmailConfirmed)
            {
                return(new AjaxResult("注册邮箱已激活,操作取消", AjaxResultType.Info));
            }

            string         code   = UrlBase64ReplaceChar(dto.Code);
            IdentityResult result = await _userManager.ConfirmEmailAsync(user, code);

            return(result.ToOperationResult().ToAjaxResult());
        }
Example #6
0
        public async Task <IActionResult> Delete(string id)
        {
            AppUser user = await userManager.FindByIdAsync(id);

            if (user != null)
            {
                IdentityResult result = await userManager.DeleteAsync(user);

                if (result.Succeeded)
                {
                    TempData["poruka"] = $"Successfully deleted";
                    return(RedirectToAction("Index", "IdAdmin"));
                }
                else
                {
                    AddErrorsFromResult(result);
                }
            }
            else
            {
                ModelState.AddModelError("", "User Not Found");
            }
            return(View("~/Views/Identity/Admin/Index.cshtml", userManager.Users));
        }
Example #7
0
        public async void CreateRestaurantUser(UserManager <IdentityUser> userManager)
        {
            const string restaurantEmail = "*****@*****.**";
            const string password        = "******";

            if (userManager.FindByNameAsync(restaurantEmail).Result == null)
            {
                var user = new IdentityUser
                {
                    UserName = restaurantEmail,
                    Email    = restaurantEmail
                };
                IdentityResult result = userManager.CreateAsync
                                            (user, password).Result;
                if (result.Succeeded)
                {
                    var claim = new Claim("Restaurant", "Yes");
                    userManager.AddClaimAsync(user, claim).Wait();
                    string token = await userManager.GenerateEmailConfirmationTokenAsync(user);

                    userManager.ConfirmEmailAsync(user, token).Wait();
                }
            }
        }
        public async Task <IHttpActionResult> Register(RegisterBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var user = new User()
            {
                UserName  = model.Email,
                Email     = model.Email,
                FirstName = model.FirstName,
                LastName  = model.LastName
            };

            IdentityResult result = await UserManager.CreateAsync(user, model.Password);

            if (!result.Succeeded)
            {
                return(GetErrorResult(result));
            }

            return(Ok());
        }
Example #9
0
        public async Task Given_failure_identityResult_When_ResetPassword_Returns_ResetPasswordConfirmationView()
        {
            //Given
            ApplicationUser user = new ApplicationUser()
            {
                Id = "5"
            };

            var model = new ResetPasswordViewModel()
            {
                UserId = "5"
            };

            _userRepository.Setup(x => x.GetUser(It.IsAny <string>())).Returns(user);

            DpapiDataProtectionProvider Null = null;
            DataProtectorTokenProvider <ApplicationUser> Null2 = null;

            _identityFacade.Setup(x => x.GetProvider(It.IsAny <string>())).Returns(Null);
            _identityFacade.Setup(x => x.GetUserTokenProvider(Null, It.IsAny <string>())).Returns(Null2);

            _userManager.Setup(x => x.GeneratePasswordResetTokenAsync(user.Id)).ReturnsAsync(string.Empty);

            _userManager.Setup(x => x.ResetPasswordAsync(It.IsAny <string>(),
                                                         It.IsAny <string>(),
                                                         It.IsAny <string>())).
            ReturnsAsync(IdentityResult.Failed());

            //When
            var result = await _accountController.ResetPassword(model) as ViewResult;

            //Then
            Assert.NotNull(result);
            Assert.AreEqual(String.Empty, result.ViewName);
            Assert.IsInstanceOf <ResetPasswordViewModel>(result.Model);
        }
Example #10
0
        public async Task <ActionResult> ResetPassword(UserResetPasswordViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            AppUser user = await _userManager.FindByNameAsync(model.Email);

            if (user == null)
            {
                return(View(model));
            }

            IdentityResult result = await _userManager.ResetPasswordAsync(user.Id, model.Code, model.NewPassword);

            if (result.Succeeded)
            {
                return(View("ResetPasswordConfirmation"));
            }

            AddErrorsFromResult(result);
            return(View(model));
        }
Example #11
0
        protected void MUserInRolesGridView_CustomCallback(object sender, DevExpress.Web.ASPxGridViewCustomCallbackEventArgs e)
        {
            int    rowIndex = int.Parse(e.Parameters);
            string userId   = string.Empty;
            string role     = string.Empty;
            string roleId   = string.Empty;

            if (rowIndex >= 0)
            {
                Session["UserId"] = MUsersGridView.GetRowValues(int.Parse(e.Parameters), "Id").ToString();
            }
            else
            {
                var manager = Context.GetOwinContext().GetUserManager <ApplicationUserManager>();

                //var context = new ApplicationDbContext();
                //var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
                //var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));

                if (rowIndex == -2)
                {
                    if (MRolesGridView.FocusedRowIndex > -1 && MUsersGridView.FocusedRowIndex > -1)
                    {
                        role   = MRolesGridView.GetRowValues(MRolesGridView.FocusedRowIndex, "Name").ToString();
                        userId = MUsersGridView.GetRowValues(MUsersGridView.FocusedRowIndex, "Id").ToString();
                        if (!manager.IsInRole(userId, role))
                        {
                            IdentityResult result = manager.AddToRole(userId, role);
                            if (!result.Succeeded)
                            {
                                throw new Exception(result.Errors.FirstOrDefault());
                            }
                        }
                    }
                }
                else if (rowIndex == -3)
                {
                    if (MUsersGridView.FocusedRowIndex > -1)
                    {
                        userId = MUsersGridView.GetRowValues(MUsersGridView.FocusedRowIndex, "Id").ToString();
                        List <Object> selectedItems = MRolesGridView.GetSelectedFieldValues(new string[] { "Id", "Name" });
                        foreach (object[] selectedItem in selectedItems)
                        {
                            role = selectedItem[1].ToString();
                            if (!manager.IsInRole(userId, role))
                            {
                                IdentityResult result = manager.AddToRole(userId, role);
                                if (!result.Succeeded)
                                {
                                    throw new Exception(result.Errors.FirstOrDefault());
                                }
                            }
                        }
                    }
                }
                else if (rowIndex == -4)
                {
                    if (MUsersGridView.FocusedRowIndex > -1 && MUserInRolesGridView.FocusedRowIndex > -1)
                    {
                        userId = MUsersGridView.GetRowValues(MUsersGridView.FocusedRowIndex, "Id").ToString();
                        roleId = MUserInRolesGridView.GetRowValues(MUserInRolesGridView.FocusedRowIndex, "RoleId").ToString();
                        var roleManager = new RoleManager <IdentityRole>(new RoleStore <IdentityRole>(new ApplicationDbContext()));
                        role = roleManager?.FindById(roleId)?.Name ?? string.Empty;

                        if (manager.IsInRole(userId, role))
                        {
                            IdentityResult result = manager.RemoveFromRole(userId, role);
                            if (!result.Succeeded)
                            {
                                throw new Exception(result.Errors.FirstOrDefault());
                            }
                        }
                    }
                }
                else if (rowIndex == -5)
                {
                    if (MUsersGridView.FocusedRowIndex > -1 && MUserInRolesGridView.VisibleRowCount > 0)
                    {
                        userId = MUsersGridView.GetRowValues(MUsersGridView.FocusedRowIndex, "Id").ToString();
                        var           roleManager   = new RoleManager <IdentityRole>(new RoleStore <IdentityRole>(new ApplicationDbContext()));
                        List <Object> selectedItems = MUserInRolesGridView.GetSelectedFieldValues(new string[] { "UserId", "RoleId" });
                        foreach (object[] selectedItem in selectedItems)
                        {
                            roleId = selectedItem[1].ToString();
                            role   = roleManager?.FindById(roleId)?.Name ?? string.Empty;
                            if (manager.IsInRole(userId, role))
                            {
                                IdentityResult result = manager.RemoveFromRole(userId, role);
                                if (!result.Succeeded)
                                {
                                    throw new Exception(result.Errors.FirstOrDefault());
                                }
                            }
                        }
                    }
                }

                //context.SaveChanges();
            }
            MUserInRolesGridView.DataBind();
        }
        //public CustomPasswordValidator(int length)
        //{
        //    RequiredLength = length;
        //}

        Task <IdentityResult> IIdentityValidator <string> .ValidateAsync(string item)
        {
            List <string> filedMessages = new List <string>();

            string[] filedMessage = { };
            if (String.IsNullOrEmpty(item) || item.Length < RequiredLength)
            {
                filedMessages.Add(String.Format("密碼長度至少 {0} ", RequiredLength));
                //return Task.FromResult(IdentityResult.Failed(String.Format("密碼長度至少 {0}", RequiredLength)));
            }

            if (RequireDigit)
            {
                string digitPattern = @"^(?=.*[0-9]).*$";
                if (!Regex.IsMatch(item, digitPattern))
                {
                    filedMessages.Add("密碼須包含 數字");
                    //return Task.FromResult(IdentityResult.Failed("密碼須包含 數字"));
                }
            }

            if (RequireUppercase)
            {
                string lowercasePattern = @"^(?=.*[A-Z]).*$";
                if (!Regex.IsMatch(item, lowercasePattern))
                {
                    filedMessages.Add("密碼須包含 大寫英文字母");
                    //return Task.FromResult(IdentityResult.Failed("密碼須包含 大寫英文字母"));
                }
            }

            if (RequireLowercase)
            {
                string lowercasePattern = @"^(?=.*[a-z]).*$";
                if (!Regex.IsMatch(item, lowercasePattern))
                {
                    filedMessages.Add("密碼須包含 小寫英文字母");
                    //return Task.FromResult(IdentityResult.Failed("密碼須包含 小寫英文字母"));
                }
            }

            if (RequireNonLetter)
            {
                string lowercasePattern = @"^(?=.*[!@#$%^&*;]).*$";
                if (!Regex.IsMatch(item, lowercasePattern))
                {
                    filedMessages.Add("密碼須包含 特殊字元(!@#$%^&*;)");
                    //return Task.FromResult(IdentityResult.Failed("密碼須包含 特殊字元(!@#$%^&*;)"));
                }
            }

            if (filedMessages.Count != 0)
            {
                return(Task.FromResult(IdentityResult.Failed(filedMessages.ToArray())));
            }

            //string pattern = @"^(?=.*[0-9])(?=.*[!@#$%^&*])[0-9a-zA-Z!@#$%^&*0-9]{10,}$";

            //if (!Regex.IsMatch(item, pattern))
            //{
            //    return Task.FromResult(IdentityResult.Failed("密碼須包含 數字 與 特殊字元"));
            //}

            return(Task.FromResult(IdentityResult.Success));
        }
Example #13
0
        public static void Seed(IServiceProvider serviceProvider, IOptions <ApplicationSettings> options)
        {
            UserManager <ApplicationUser> userManager = serviceProvider.GetService <UserManager <ApplicationUser> >();
            RoleManager <IdentityRole>    roleManager = serviceProvider.GetService <RoleManager <IdentityRole> >();
            // Get All comma-separated roles
            var roles = options.Value.Roles.Split(",");

            // Create roles if they are not existed
            foreach (var role in roles)
            {
                if (!roleManager.RoleExistsAsync(role).Result)
                {
                    var storageRole = new IdentityRole
                    {
                        Name = role
                    };
                    IdentityResult roleResult = roleManager.CreateAsync(storageRole).Result;
                }
            }

            // Create admin if he is not existed
            var admin = userManager.FindByEmailAsync(options.Value.AdminEmail).Result;

            if (admin == null)
            {
                ApplicationUser user = new ApplicationUser
                {
                    UserName       = options.Value.AdminName,
                    Email          = options.Value.AdminEmail,
                    EmailConfirmed = true,
                    IsActive       = "True"
                };

                IdentityResult result = userManager.CreateAsync(user, options.Value.AdminPassword).Result;
                userManager.AddClaimAsync(user, new System.Security.Claims.Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", options.Value.AdminEmail));
                userManager.AddClaimAsync(user, new System.Security.Claims.Claim("IsActive", "True"));

                // Add Admin to Admin roles
                if (result.Succeeded)
                {
                    userManager.AddToRoleAsync(user, "Admin");
                }
            }

            // Create a service engineer if he is not existed
            var engineer = userManager.FindByEmailAsync(options.Value.EngineerEmail).Result;

            if (engineer == null)
            {
                ApplicationUser user = new ApplicationUser
                {
                    UserName       = options.Value.EngineerName,
                    Email          = options.Value.EngineerEmail,
                    EmailConfirmed = true,
                    LockoutEnabled = false,
                    IsActive       = "True"
                };

                IdentityResult result = userManager.CreateAsync(user, options.Value.EngineerPassword).Result;
                userManager.AddClaimAsync(user, new System.Security.Claims.Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", options.Value.EngineerEmail));
                userManager.AddClaimAsync(user, new System.Security.Claims.Claim("IsActive", "True"));

                // Add Service Engineer to Engineer role
                if (result.Succeeded)
                {
                    userManager.AddToRoleAsync(user, "Engineer");
                }
            }
        }
Example #14
0
        public async Task ChangePasswordFail_ChangePasswordError()
        {
            ChangePasswordViewModel viewModel = new ChangePasswordViewModel
            {
                ConfirmPassword = "******",
                NewPassword     = "******",
                OldPassword     = "******",
            };

            moqAspIdentity.mockUserManager.Setup(x => x.GetUserAsync(It.IsAny <ClaimsPrincipal>())).ReturnsAsync(applicationUser);
            moqAspIdentity.mockUserManager.Setup(x => x.ChangePasswordAsync(It.IsAny <ApplicationUser>(), It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(IdentityResult.Failed(this.identityError));

            // setup
            AccountModel model = new AccountModel(moqAspIdentity.mockUserManager.Object);

            // operation
            try
            {
                string result = await model.ChangePassword(viewModel, moqAspIdentity.mockModelState.Object, moqAspIdentity.mockClaimsPrincipal.Object);

                // assert
                Assert.Fail("Should throw exception.");
            }
            catch (Exception ex)
            {
                if (ex is ApiException)
                {
                    Assert.AreEqual(((ApiException)ex).ExceptionType, ExceptionsTypes.ChangePassword);
                }
                else
                {
                    Assert.Fail("Wrong Type of exception thrown.");
                }
            }
        }
        public async Task <ActionResult> Register(RegisterViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var user = new User
            {
                UserName  = model.UserName,
                FirstName = model.FirstName,
                LastName  = model.LastName,
                Email     = model.UserName,
                FullName  = UserInfoProvider.GetFullName(model.FirstName, null, model.LastName),
                Enabled   = true
            };

            var registerResult = new IdentityResult();

            try
            {
                registerResult = await UserManager.CreateAsync(user, model.Password);
            }
            catch (Exception ex)
            {
                Service.Resolve <IEventLogService>().LogException("AccountController", "Register", ex);
                ModelState.AddModelError(String.Empty, ResHelper.GetString("register_failuretext"));
            }

            if (registerResult.Succeeded)
            {
                membershipActivitiesLogger.LogRegistration(model.UserName);
                var signInResult = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, true, false);

                if (signInResult == SignInStatus.Success)
                {
                    ContactManagementContext.UpdateUserLoginContact(model.UserName);

                    SendRegistrationSuccessfulEmail(user.Email);
                    membershipActivitiesLogger.LogLogin(model.UserName);

                    return(Redirect(Url.Kentico().PageUrl(ContentItemIdentifiers.HOME)));
                }

                if (signInResult == SignInStatus.LockedOut)
                {
                    if (user.WaitingForApproval)
                    {
                        SendWaitForApprovalEmail(user.Email);
                    }

                    return(RedirectToAction("RequireConfirmedAccount"));
                }
            }

            foreach (var error in registerResult.Errors)
            {
                ModelState.AddModelError(String.Empty, error);
            }

            return(View(model));
        }
Example #16
0
        public static void SeedUsers(UserManager <IdentityUser> userManager)
        {
            IdentityUser admin = userManager.FindByEmailAsync("*****@*****.**").Result;

            if (admin == null)
            {
                IdentityUser sysadmin = new IdentityUser();
                sysadmin.Email    = "*****@*****.**";
                sysadmin.UserName = "******";

                IdentityResult result = userManager.CreateAsync(sysadmin, "1Hort_Ed@").Result;

                if (result.Succeeded)
                {
                    userManager.AddToRoleAsync(sysadmin, "Administrator").Wait();
                }
            }
            IdentityUser instructor = userManager.FindByEmailAsync("*****@*****.**").Result;

            if (instructor == null)
            {
                IdentityUser sysadmin = new IdentityUser();
                sysadmin.Email    = "*****@*****.**";
                sysadmin.UserName = "******";

                IdentityResult result = userManager.CreateAsync(sysadmin, "1Hort_Ed@").Result;

                if (result.Succeeded)
                {
                    userManager.AddToRoleAsync(sysadmin, "Instructor").Wait();
                }
            }
            IdentityUser materialsmgmt = userManager.FindByEmailAsync("*****@*****.**").Result;

            if (materialsmgmt == null)
            {
                IdentityUser sysadmin = new IdentityUser();
                sysadmin.Email    = "*****@*****.**";
                sysadmin.UserName = "******";

                IdentityResult result = userManager.CreateAsync(sysadmin, "1Hort_Ed@").Result;

                if (result.Succeeded)
                {
                    userManager.AddToRoleAsync(sysadmin, "MaterialsManagement").Wait();
                }
            }
            IdentityUser billing = userManager.FindByEmailAsync("*****@*****.**").Result;

            if (billing == null)
            {
                IdentityUser sysadmin = new IdentityUser();
                sysadmin.Email    = "*****@*****.**";
                sysadmin.UserName = "******";

                IdentityResult result = userManager.CreateAsync(sysadmin, "1Hort_Ed@").Result;

                if (result.Succeeded)
                {
                    userManager.AddToRoleAsync(sysadmin, "Billing").Wait();
                }
            }
        }
 public static Result ToApplicationResult(this IdentityResult result)
 {
     return(result.Succeeded
         ? Result.Success()
         : Result.Failure(result.Errors.Select(e => e.Description)));
 }
Example #18
0
        /// <summary>
        /// This will update EmailConfirmed field in Database
        /// </summary>
        /// <param name="user"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        public async Task <IdentityResult> ConfirmEmailAsync(User user, string token)
        {
            IdentityResult result = await this._userManager.ConfirmEmailAsync(user, token);

            return(result);
        }
Example #19
0
 /// <summary>
 /// 如果成功移除缓存。
 /// </summary>
 /// <param name="result">返回结果。</param>
 /// <param name="role">当前角色实例。</param>
 /// <returns>返回结果。</returns>
 protected IdentityResult FromResult(IdentityResult result, TRole role)
 {
     FromResult(result.Succeeded, role);
     return(result);
 }
 public static void IsFailure(IdentityResult result)
 {
     Assert.NotNull(result);
     Assert.False(result.Succeeded);
 }
 public static void IsSuccess(IdentityResult result)
 {
     Assert.NotNull(result);
     Assert.True(result.Succeeded);
 }
 public AspNetIdentityResultWrapper(IdentityResult identityResult)
 {
     _identityResult = identityResult;
 }
 //error response
 private void Errors(IdentityResult result)
 {
     foreach (IdentityError error in result.Errors)
         ModelState.AddModelError("", error.Description);
 }
Example #24
0
        public async Task <IActionResult> Register(RegisterViewModel model, string returnUrl = "")
        {
            //TODo: Beide PW gleich --> Check
            //Überprüfen, ob User und Adresse bereits existieren
            User    userCheck    = db.User.Where(u => u.UserName == model.Username).SingleOrDefault();
            Address addressCheck = db.Address.Where(a =>
                                                    a.Country == model.Country && a.City == model.City && a.ZipCode == model.ZipCode &&
                                                    a.Street == model.Street && a.Number == model.Number).SingleOrDefault();

            //Gültigkeit des Registierungskeys Prüfen
            try
            {
                Randomkey key = db.Randomkey.Where(r => r.Key == model.Registerkey).First();
                db.Randomkey.Remove(key);
                db.SaveChanges();
            }
            catch
            {
                ModelState.AddModelError("Registererror",
                                         "Registerkey is not available, maybe this key is not valid anymore");
                return(View("RegisterView", model));
            }

            //Falls Adresse nicht vorhanden, neue Anlegen
            if (addressCheck == null)
            {
                Address newAddress = new Address
                {
                    Country = model.Country,
                    City    = model.City,
                    ZipCode = model.ZipCode,
                    Street  = model.Street,
                    Number  = model.Number
                };
                db.Add(newAddress);
                db.SaveChanges();
            }

            addressCheck = db.Address.Where(a =>
                                            a.Country == model.Country && a.City == model.City && a.ZipCode == model.ZipCode &&
                                            a.Street == model.Street && a.Number == model.Number).SingleOrDefault();

            //Falls User nicht vorhanden, neuen User anlegen
            if (userCheck == null)
            {
                User newUser = new User
                {
                    Firstname  = model.Firstname,
                    Name       = model.Name,
                    UserName   = model.Username,
                    Email      = model.Email,
                    Birthday   = model.Birthday,
                    Birthplace = model.Birthplace,
                    AddressId  = addressCheck.Id
                };
                //User Speichern und Passwort Hashen
                IdentityResult identityResult = await signInManager.UserManager.CreateAsync(newUser, model.Password);

                //Falls Speicherung erfolgreich wird User der Rolle "User" zugeordnet
                if (identityResult.Succeeded)
                {
                    bool register = false;
                    //await signInManager.UserManager.AddToRoleAsync(newUser, "User"); Es wird IsInRoleAsync aufgerufen
                    Role     role     = db.Role.SingleOrDefault(r => r.Name == "User");
                    UserRole userRole = new UserRole
                    {
                        UserId = newUser.Id,
                        RoleId = role.Id
                    };
                    db.Add(userRole);
                    db.SaveChanges();

                    if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
                    {
                        register = true;
                        return(RedirectToAction("Index", "Home"));
                        //return Redirect(returnUrl);
                    }

                    register = false;
                    return(RedirectToAction("Index", "Home", new { register }));
                }
            }


            ModelState.AddModelError("", "Invalid register attempt");
            return(View("RegisterView", model));
        }
Example #25
0
        public async Task <IActionResult> ExternalResponse(string ReturnUrl = "/")    // return url gelmezse / anasayfaya yonlenecek.
        {
            ExternalLoginInfo info = await signInManager.GetExternalLoginInfoAsync(); // harici loginle alakali bilgiler gelecek.

            if (info == null)
            {
                return(RedirectToAction("LogIn"));
            }
            else
            {
                // SignInResult donuyor. cakisma olmamasi icin namespace belirtmek gerekir. Microsoft.AspNetCore.Identity
                Microsoft.AspNetCore.Identity.SignInResult result = await signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, true); // isPersistent değeri true varsayilan cookie'ye gore 60 gun tutulacak.

                // daha once kullanici login olmussa, login islemi gerceklesecek.

                if (result.Succeeded)
                {
                    return(Redirect(ReturnUrl));
                }

                // kullanici ilk kez geliyorsa;
                else
                {
                    AppUser user = new AppUser();

                    // Principal uzerinden saglayicidan gelen claimlere ulasabiliyoruz.
                    user.Email = info.Principal.FindFirst(ClaimTypes.Email).Value;                     // claim'lerden email olan bulunacak. value'si cekilecek.
                    string ExternalUserId = info.Principal.FindFirst(ClaimTypes.NameIdentifier).Value; // NameIdentifier, saglayicidaki id'yi verecek.

                    // saglayicidan gelen ad ve soyad ile username olusturma islemi
                    if (info.Principal.HasClaim(x => x.Type == ClaimTypes.Name)) // name claim varsa
                    {
                        string userName = info.Principal.FindFirst(ClaimTypes.Name).Value;

                        // bosluk yerine - ve kucuk. baska isimle cakismamasi icin id'de ekleniyor. (ilk 5)
                        userName = userName.Replace(' ', '-').ToLower() + ExternalUserId.Substring(0, 5).ToString();

                        user.UserName = userName;
                    }
                    else // eger name claim yoksa kullanici adi email
                    {
                        user.UserName = info.Principal.FindFirst(ClaimTypes.Email).Value;
                    }

                    IdentityResult createResult = await userManager.CreateAsync(user);

                    if (createResult.Succeeded)                                                   // kullanici basarili bi' sekilde olusmussa
                    {
                        IdentityResult loginResult = await userManager.AddLoginAsync(user, info); // login islemi için, AspNetUserLogins tablosuna kayit ediliyor.


                        if (loginResult.Succeeded)
                        {
                            // await signInManager.SignInAsync(user, true); // giris islemi gerceklesiyor. Kullanicinin isPersisten degeri true cekiliyor. Cooki belirtilen sure kadar aktif.

                            await signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, true); // gelen kullanicinin saglayicidan geldigi belli olsun diye ExternalLoginSignInAsync kullanildi. Uye claims'den saglayici araciligiyla geldigi belli olacak kullanicinin.

                            return(Redirect(ReturnUrl));
                        }
                        else
                        {
                            AddModelError(loginResult);
                        }
                    }
                    else
                    {
                        AddModelError(createResult); // createResult hatalari
                    }
                }
            }

            // Model state yapisindan hatalari liste seklinde LINQ kullanarak cekme ve CustomError sayfasina model olarak gonderme

            List <string> errors = ModelState.Values.SelectMany(x => x.Errors).Select(y => y.ErrorMessage).ToList();

            return(View("CustomError", errors));
        }
Example #26
0
        public dynamic Put(ChangePasswordDTO objresetpassword)
        {
            CustomResponse objres = new CustomResponse();

            if (objresetpassword.ChageType == 1)
            {
                try
                {
                    //compare key with database
                    if (AccountRepository.CompareResetToken(objresetpassword.userid, objresetpassword.oldpassword))
                    {
                        var provider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider("Sample");
                        userManager.UserTokenProvider = new Microsoft.AspNet.Identity.Owin.DataProtectorTokenProvider <MyIdentityUser>(provider.Create("EmailConfirmation"));

                        string         resettoken = userManager.GeneratePasswordResetToken(objresetpassword.userid);
                        IdentityResult objresult  = userManager.ResetPassword(objresetpassword.userid, resettoken, objresetpassword.newpassword);
                        if (objresult.Succeeded)
                        {
                            objres.Status   = CustomResponseStatus.Successful;
                            objres.Message  = "Password Updated Successfully";
                            objres.Response = null;
                        }
                        else
                        {
                            objres.Status   = CustomResponseStatus.UnSuccessful;
                            objres.Message  = "Failed";
                            objres.Response = null;
                        }
                    }
                    else
                    {
                        objres.Status   = CustomResponseStatus.UnSuccessful;
                        objres.Message  = "Invalid Access token";
                        objres.Response = null;
                    }
                }
                catch (Exception ex)
                {
                    objres.Status   = CustomResponseStatus.Exception;
                    objres.Message  = ex.Message;
                    objres.Response = null;
                }
                return(objres);
            }
            else if (objresetpassword.ChageType == 2)
            {
                try
                {
                    IdentityResult result = userManager.ChangePassword(objresetpassword.userid, objresetpassword.oldpassword, objresetpassword.newpassword);
                    objres.Response = null;

                    if (result.Succeeded)
                    {
                        objres.Status  = CustomResponseStatus.Successful;
                        objres.Message = "Password Changed Successfully";
                    }
                    else
                    {
                        objres.Status  = CustomResponseStatus.UnSuccessful;
                        objres.Message = "Failed to update Password";
                    }
                }
                catch (Exception ex)
                {
                    objres.Status   = CustomResponseStatus.Successful;
                    objres.Message  = ex.Message;
                    objres.Response = null;
                }

                return(objres);
            }
            else if (objresetpassword.ChageType == 3)
            {
                try
                {
                    MyIdentityUser objuser = userManager.FindByEmail(objresetpassword.Email);
                    objuser.FirstName    = objresetpassword.FirstName;
                    objuser.LastName     = objresetpassword.LastName;
                    objuser.MobileNumber = objresetpassword.MobileNumber;
                    IdentityResult objidentityresult = userManager.Update(objuser);
                    objres.Response = null;

                    if (objidentityresult.Succeeded)
                    {
                        objres.Status  = CustomResponseStatus.Successful;
                        objres.Message = "User Updated Successfully";
                    }
                    else
                    {
                        objres.Status  = CustomResponseStatus.UnSuccessful;
                        objres.Message = "Failed to update User Details";
                    }
                }
                catch (Exception ex)
                {
                    objres.Status   = CustomResponseStatus.Successful;
                    objres.Message  = ex.Message;
                    objres.Response = null;
                }

                return(objres);
            }
            else
            {
                return(null);
            }
        }
Example #27
0
        public async Task <IActionResult> PostUser([FromBody] UserRequest request)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new Response <object>
                {
                    IsSuccess = false,
                    Message = "Bad request"
                }));
            }

            User user = await _userHelper.GetUserByEmailAsync(request.Email);

            if (user != null)
            {
                return(BadRequest(new Response <object>
                {
                    IsSuccess = false,
                    Message = "This email is already registered."
                }));
            }

            user = new User
            {
                Address     = request.Address,
                Document    = request.Document,
                Email       = request.Email,
                FirstName   = request.FirstName,
                LastName    = request.LastName,
                PhoneNumber = request.Phone,
                UserName    = request.Email
            };

            IdentityResult result = await _userHelper.AddUserAsync(user, request.Password);

            if (result != IdentityResult.Success)
            {
                return(BadRequest(result.Errors.FirstOrDefault().Description));
            }

            User userNew = await _userHelper.GetUserByEmailAsync(request.Email);

            if (request.RoleId == 1)
            {
                await _userHelper.AddUserToRoleAsync(userNew, "Owner");

                _dataContext.Owners.Add(new Owner {
                    User = userNew
                });
            }
            else
            {
                await _userHelper.AddUserToRoleAsync(userNew, "Lessee");

                _dataContext.Lessees.Add(new Lessee {
                    User = userNew
                });
            }

            await _dataContext.SaveChangesAsync();

            string myToken = await _userHelper.GenerateEmailConfirmationTokenAsync(user);

            string tokenLink = Url.Action("ConfirmEmail", "Account", new
            {
                userid = user.Id,
                token  = myToken
            }, protocol: HttpContext.Request.Scheme);

            _mailHelper.SendMail(request.Email, "Email confirmation", $"<h1>Email Confirmation</h1>" +
                                 $"To allow the user, " +
                                 $"please click on this link:</br></br><a href = \"{tokenLink}\">Confirm Email</a>");

            return(Ok(new Response <object>
            {
                IsSuccess = true,
                Message = "A Confirmation email was sent. Please confirm your account and log into the App."
            }));
        }
        public override async Task <IdentityResult> ValidateAsync(UserManager <User> manager, User user, string password)
        {
            var errors = new List <IdentityError>();

            if (string.IsNullOrWhiteSpace(password))
            {
                errors.Add(new IdentityError
                {
                    Code        = "PasswordIsNotSet",
                    Description = "لطفا کلمه‌ی عبور را تکمیل کنید."
                });
                return(IdentityResult.Failed(errors.ToArray()));
            }

            if (string.IsNullOrWhiteSpace(user?.UserName))
            {
                errors.Add(new IdentityError
                {
                    Code        = "UserNameIsNotSet",
                    Description = "لطفا نام کاربری را تکمیل کنید."
                });
                return(IdentityResult.Failed(errors.ToArray()));
            }

            // First use the built-in validator
            var result = await base.ValidateAsync(manager, user, password);

            errors = result.Succeeded ? new List <IdentityError>() : result.Errors.ToList();

            // Extending the built-in validator
            if (password.Contains(user.UserName, StringComparison.OrdinalIgnoreCase))
            {
                errors.Add(new IdentityError
                {
                    Code        = "PasswordContainsUserName",
                    Description = "کلمه‌ی عبور نمی‌تواند حاوی قسمتی از نام کاربری باشد."
                });
                return(IdentityResult.Failed(errors.ToArray()));
            }

            if (!isSafePasword(password))
            {
                errors.Add(new IdentityError
                {
                    Code        = "PasswordIsNotSafe",
                    Description = "کلمه‌ی عبور وارد شده به سادگی قابل حدس زدن است."
                });
                return(IdentityResult.Failed(errors.ToArray()));
            }

            if (await _usedPasswordsService.IsPreviouslyUsedPasswordAsync(user, password))
            {
                errors.Add(new IdentityError
                {
                    Code        = "IsPreviouslyUsedPassword",
                    Description = "لطفا کلمه‌ی عبور دیگری را انتخاب کنید. این کلمه‌ی عبور پیشتر توسط شما استفاده شده‌است و تکراری می‌باشد."
                });
                return(IdentityResult.Failed(errors.ToArray()));
            }

            return(!errors.Any() ? IdentityResult.Success : IdentityResult.Failed(errors.ToArray()));
        }
Example #29
0
 public void VerifyDefaultConstructor()
 {
     var result = new IdentityResult();
     Assert.False(result.Succeeded);
     Assert.Equal(0, result.Errors.Count());
 }
 public static RespostaApi ParaRespostaApi(this IdentityResult resultado)
 {
     return(resultado.Succeeded
         ? RespostaApi.Sucesso()
         : RespostaApi.Falha(resultado.Errors.Select(e => e.Description)));
 }
        public async Task<ActionResult> Register(RegisterViewModel rvm)
        {
            //if registration data is valid, create a new user on the database
            if (ModelState.IsValid)
            {
                //this code maps the RegisterViewModel to the AppUser domain model
                AppUser newUser = new AppUser
                {
                    UserName = rvm.Email,
                    Email = rvm.Email,
                    PhoneNumber = rvm.PhoneNumber,
                    Address = rvm.Address,
                    Birthdate = rvm.Birthdate,
                    FirstName = rvm.FirstName,
                    LastName = rvm.LastName,
                    
                };
                TimeSpan newdate = DateTime.Now.Subtract(rvm.Birthdate);

                if (DateTime.Now.Year - rvm.Birthdate.Year < 13)
                {
                    return View("Error", new String[] { "You must be at least 13 years old to register!" });
                }

                if (rvm.RoleChoice == RoleChoice.Employee && newdate.TotalDays < 6570)
                {
                    return View("Error", new String[] { "Employees must be 18 or older!" });
                }

                //This code uses the UserManager object to create a new user with the specified password
                IdentityResult result = await _userManager.CreateAsync(newUser, rvm.Password);

                //If the add user operation was successful, we need to do a few more things
                if (result.Succeeded)
                {
                    //TODO: Add user to desired role. This example adds the user to the customer role

                    await _userManager.AddToRoleAsync(newUser, rvm.RoleChoice.ToString());

                    //NOTE: This code logs the user into the account that they just created
                    //You may or may not want to log a user in directly after they register - check
                    //the business rules!
                    if (@User.Identity.IsAuthenticated == false)
                    {
                        Microsoft.AspNetCore.Identity.SignInResult result2 = await _signInManager.PasswordSignInAsync(rvm.Email, rvm.Password, false, lockoutOnFailure: false);
                    }

                    if(rvm.RoleChoice == RoleChoice.Employee)
                    {
                        Utilities.EmailMessaging.SendEmail(rvm.Email, "Registration Confirmation:", "Congratulations, " + rvm.FirstName + " you have been hired and your account has been registered!");
                    }
                    else
                    {
                        Utilities.EmailMessaging.SendEmail(rvm.Email, "Registration Confirmation:", "Congratulations, " + rvm.FirstName + " you have successfully registered your account!");
                    }

                    //Send the user to the home page
                    return RedirectToAction("Index", "Home");
                }
                else  //the add user operation didn't work, and we need to show an error message
                {
                    foreach (IdentityError error in result.Errors)
                    {
                        ModelState.AddModelError("", error.Description);
                    }
                }
            }
            //this is the sad path - something went wrong, 
            //return the user to the register page to try again
            return View(rvm);
        }
        /// <summary>
        /// Christian Lopez
        /// 2017/04/14
        ///
        /// Adding Admin and other roles - Mimic code used in .NET class
        /// </summary>
        /// <remarks>William Flood enabled Migrations 2017/04/13</remarks>
        /// <param name="context"></param>
        protected override void Seed(MVCPresentationLayer.Models.ApplicationDbContext context)
        {
            var userStore   = new UserStore <ApplicationUser>(context);
            var userManager = new UserManager <ApplicationUser>(userStore);

            // check for an admin, and if not there, create one
            if (!context.Users.Any(u => u.UserName == "*****@*****.**"))
            {
                var user = new ApplicationUser
                {
                    UserName = "******",
                    Email    = "*****@*****.**"
                               //FirstName = "System",
                               //LastName = "Admin"
                };

                IdentityResult result = userManager.Create(user, "P@ssw0rd");

                if (result.Succeeded)
                {
                    // add claims if we want - don't do first one
                    //userManager.AddClaim(user.Id, new Claim(ClaimTypes.Role, "Administrator"));
                    userManager.AddClaim(user.Id, new Claim(ClaimTypes.GivenName, "System"));
                    userManager.AddClaim(user.Id, new Claim(ClaimTypes.Surname, "Administrator"));
                }

                context.Roles.AddOrUpdate(r => r.Name, new IdentityRole {
                    Name = "Administrator"
                });
                context.SaveChanges();
                userManager.AddToRole(user.Id, "Administrator");
                context.SaveChanges();
            }

            // Add the roles based on tables in the existing internal system
            context.Roles.AddOrUpdate(r => r.Name, new IdentityRole {
                Name = "Employee"
            });
            context.Roles.AddOrUpdate(r => r.Name, new IdentityRole {
                Name = "Customer"
            });
            context.Roles.AddOrUpdate(r => r.Name, new IdentityRole {
                Name = "Supplier"
            });
            context.SaveChanges();

            if (!context.Users.Any(u => u.UserName == "jmyers"))
            {
                var user = new ApplicationUser
                {
                    UserName = "******",
                    Email    = "*****@*****.**"
                               //FirstName = "John",
                               //LastName = "Myers"
                };

                IdentityResult result = userManager.Create(user, "m0R3$e(ur3");

                if (result.Succeeded)
                {
                    // add claims if we want - don't do first one
                    //userManager.AddClaim(user.Id, new Claim(ClaimTypes.Role, "Administrator"));
                    userManager.AddClaim(user.Id, new Claim(ClaimTypes.GivenName, "John"));
                    userManager.AddClaim(user.Id, new Claim(ClaimTypes.Surname, "Myers"));
                }

                context.SaveChanges();
                userManager.AddToRole(user.Id, "Customer");
                context.SaveChanges();
            }
        }
Example #33
0
        // Type-1: update proifle   Type-2 : forgot password link sending, Type-3 : Add User
        public dynamic Post(UserDTO objuserinfo, int type)
        {
            CustomResponse objres = new CustomResponse();

            if (type == 1)

            {
                return(UserRepository.UpdateProfile(objuserinfo));
            }
            else if (type == 2)
            {
                try
                {
                    MyIdentityUser objuser    = userManager.FindByEmail(objuserinfo.Email);
                    string         uid        = objuser.Id;
                    Random         r          = new Random();
                    string         resettoken = DateTime.Now.Millisecond.ToString() + r.Next(9999) + DateTime.Now.Millisecond + r.Next(9999).ToString() + DateTime.Now.Millisecond;
                    AccountRepository.AddPasswordResetToken(uid, resettoken);
                    Email.SendEmail("<span><h3>Please Click in the below link to reset your password</h3>  </span><div> <a href='" + ConfigurationManager.AppSettings["BaseWebUrl"].ToString() + "/Account/ResetPassword?token=" + resettoken + "&userid=" + objuser.Id + "'>Reset Password</a></div>", @"~/Email Templates/EmailTemplate.html", objuser.UserName, "Zon ticketing System Reset Password Link");
                    objres.Status   = CustomResponseStatus.Successful;
                    objres.Message  = "success";
                    objres.Response = null;
                }
                catch (Exception ex)
                {
                    objres.Status   = CustomResponseStatus.Exception;
                    objres.Message  = ex.Message;
                    objres.Response = null;
                }
            }
            else if (type == 3)
            {
                try
                {
                    MyIdentityUser user = new MyIdentityUser();
                    user.UserName     = objuserinfo.Email;
                    user.Email        = objuserinfo.Email;
                    user.FirstName    = objuserinfo.FirstName;
                    user.LastName     = objuserinfo.LastName;
                    user.MobileNumber = objuserinfo.MobileNumber;
                    user.CreatedBy    = objuserinfo.CreatedBy;
                    user.Status       = "1";
                    IdentityResult result = userManager.Create(user, "Zoninn@123");
                    if (result.Succeeded)
                    {
                        if (Convert.ToInt32(objuserinfo.Password) == 1)
                        {
                            userManager.AddToRole(user.Id, "Administrator");
                        }
                        else if (Convert.ToInt32(objuserinfo.Password) == 2)
                        {
                            userManager.AddToRole(user.Id, "Client");
                        }
                        else if (Convert.ToInt32(objuserinfo.Password) == 3)
                        {
                            userManager.AddToRole(user.Id, "Developer");
                        }
                        Email.SendEmail("<span><h3>You are now registered user of  Zon Innovative Ticketing System.</h3>  </span><div>Your registered Username is <b>" + objuserinfo.Email + "</b></div><div>Your Password is <b>Zoninn@123</b></div><div>You will need to use this the next time you login to our system.</div>", @"~/Email Templates/EmailTemplate.html", objuserinfo.Email, "User Registered In Zon Innovative Ticketing System");

                        objres.Status   = CustomResponseStatus.Successful;
                        objres.Message  = "Success";
                        objres.Response = null;
                    }
                    else
                    {
                        objres.Status   = CustomResponseStatus.UnSuccessful;
                        objres.Message  = "Failed";
                        objres.Response = null;
                    }
                }
                catch (Exception ex)
                {
                    objres.Status   = CustomResponseStatus.Exception;
                    objres.Message  = ex.Message;
                    objres.Response = null;
                }
            }
            return(objres);
        }
Example #34
0
 public static void IsFailure(IdentityResult result, string error)
 {
     Assert.NotNull(result);
     Assert.False(result.Succeeded);
     Assert.Equal(error, result.Errors.First());
 }
 protected virtual void CheckErrors(IdentityResult identityResult)
 {
     identityResult.CheckErrors(LocalizationManager);
 }
        public async void Registration_CalledAndFailedUserCreate_ReturnsBadRequestWithErrorContext()
        {
            IUnitOfWork       _unitOfWork    = Substitute.For <IUnitOfWork>();
            ICookieManager    _cookieManager = Substitute.For <ICookieManager>();
            IUserStore <User> _usersStore    = Substitute.For <IUserStore <User> >();
            var manager = Substitute.For <UserManager <User> >(_usersStore, null, null, null, null, null, null, null, null);

            UserRegistrationViewModel model = new UserRegistrationViewModel();
            var errorContext = new ErrorContext();

            errorContext.Errors.Add("test");
            manager.CreateAsync(Arg.Any <User>(), Arg.Any <string>()).Returns(Task.FromResult(IdentityResult.Failed(new IdentityError()
            {
                Code = "Test", Description = "test"
            })));

            var usersController = new UsersController(_unitOfWork, manager, _cookieManager);

            var result = await usersController.Registration(model);

            var badRequestObjectResult = Assert.IsType <BadRequestObjectResult>(result);
            var returnValue            = Assert.IsType <ErrorContext>(badRequestObjectResult.Value);

            Assert.Equal(errorContext.Errors, returnValue.Errors);
        }
Example #37
0
 private void CheckErrors(IdentityResult identityResult)
 {
     identityResult.CheckErrors(LocalizationManager);
 }
Example #38
0
        public void Can_create_user_and_log_in()
        {
            const string username    = "******";
            string       password    = Guid.NewGuid().ToString("n");
            const string googleLogin = "******";
            const string yahooLogin  = "******";

            var user = new SimpleAppUser {
                UserName = username
            };

            using (var docStore = NewDocStore())
            {
                using (var session = docStore.OpenSession())
                {
                    using (var mgr = new UserManager <SimpleAppUser>(new UserStore <SimpleAppUser>(session)))
                    {
                        IdentityResult result = mgr.Create(user, password);

                        Assert.True(result.Succeeded);
                        Assert.NotNull(user.Id);

                        var res1 = mgr.AddLogin(user.Id, new UserLoginInfo("Google", googleLogin));
                        var res2 = mgr.AddLogin(user.Id, new UserLoginInfo("Yahoo", yahooLogin));

                        Assert.True(res1.Succeeded);
                        Assert.True(res2.Succeeded);
                    }
                    session.SaveChanges();
                }

                using (var session = docStore.OpenSession())
                {
                    var loaded = session.Load <SimpleAppUser>(user.Id);
                    Assert.NotNull(loaded);
                    Assert.NotSame(loaded, user);
                    Assert.Equal(loaded.Id, user.Id);
                    Assert.Equal(loaded.UserName, user.UserName);
                    Assert.NotNull(loaded.PasswordHash);

                    Assert.Equal(loaded.Logins.Count, 2);
                    Assert.True(loaded.Logins.Any(x => x.LoginProvider == "Google" && x.ProviderKey == googleLogin));
                    Assert.True(loaded.Logins.Any(x => x.LoginProvider == "Yahoo" && x.ProviderKey == yahooLogin));

                    var loadedLogins = session.Advanced.LoadStartingWith <IdentityUserLogin>("IdentityUserLogins/");
                    Assert.Equal(loadedLogins.Length, 2);

                    foreach (var login in loaded.Logins)
                    {
                        var loginDoc = session.Load <IdentityUserLogin>(Util.GetLoginId(login));
                        Assert.Equal(login.LoginProvider, loginDoc.Provider);
                        Assert.Equal(login.ProviderKey, loginDoc.ProviderKey);
                        Assert.Equal(user.Id, loginDoc.UserId);
                    }
                }

                using (var session = docStore.OpenSession())
                {
                    using (var mgr = new UserManager <SimpleAppUser>(new UserStore <SimpleAppUser>(session)))
                    {
                        var userByName   = mgr.Find(username, password);
                        var userByGoogle = mgr.Find(new UserLoginInfo("Google", googleLogin));
                        var userByYahoo  = mgr.Find(new UserLoginInfo("Yahoo", yahooLogin));

                        Assert.NotNull(userByName);
                        Assert.NotNull(userByGoogle);
                        Assert.NotNull(userByYahoo);

                        Assert.Equal(userByName.UserName, username);

                        // The Session cache should return the very same objects
                        Assert.Same(userByName, userByGoogle);
                        Assert.Same(userByName, userByYahoo);
                    }
                    session.SaveChanges();
                }
            }
        }