public async Task <IActionResult> Register(RegisterModel model, string returnUrl = null) { ViewData["ReturnUrl"] = returnUrl; if (ModelState.IsValid) { var user = new PocedUser { UserName = model.Email, Email = model.Email }; var result = await _userService.CreateAsync(user, model.Password); if (result.Succeeded) { _logger.WriteDiagnostic(HttpContext, "Poced", "Web", "User created a new account with password."); await _userService.SignInAsync(user, isPersistent : false); _logger.WriteDiagnostic(HttpContext, "Poced", "Web", "User created a new account with password."); return(RedirectToLocal(returnUrl)); } AddErrors(result); } // If we got this far, something failed, redisplay form return(View(model)); }
public async Task <IActionResult> ExternalLoginConfirmation(ExternalLoginViewModel model, string returnUrl = null) { if (ModelState.IsValid) { // Get the information about the user from the external login provider var info = await _userService.GetExternalLoginInfoAsync(); if (info == null) { throw new ApplicationException("Error loading external login information during confirmation."); } var user = new PocedUser { UserName = model.Email, Email = model.Email }; var result = await _userService.CreateAsync(user); if (result.Succeeded) { result = await _userService.AddLoginAsync(user, info); if (result.Succeeded) { await _userService.SignInAsync(user, isPersistent : false); _logger.WriteDiagnostic(HttpContext, "Poced", "Web", $"User created an account using {info.LoginProvider} provider."); return(RedirectToLocal(returnUrl)); } } AddErrors(result); } ViewData["ReturnUrl"] = returnUrl; return(View(nameof(ExternalLogin), model)); }
private async Task <PocedUser> AutoProvisionUserAsync(string provider, string providerUserId, IEnumerable <Claim> claims) { // create a list of claims that we want to transfer into our store var filtered = new List <Claim>(); // user's display name var name = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.Name)?.Value ?? claims.FirstOrDefault(x => x.Type == ClaimTypes.Name)?.Value; if (name != null) { filtered.Add(new Claim(JwtClaimTypes.Name, name)); } else { var first = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.GivenName)?.Value ?? claims.FirstOrDefault(x => x.Type == ClaimTypes.GivenName)?.Value; var last = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.FamilyName)?.Value ?? claims.FirstOrDefault(x => x.Type == ClaimTypes.Surname)?.Value; if (first != null && last != null) { filtered.Add(new Claim(JwtClaimTypes.Name, first + " " + last)); } else if (first != null) { filtered.Add(new Claim(JwtClaimTypes.Name, first)); } else if (last != null) { filtered.Add(new Claim(JwtClaimTypes.Name, last)); } } // email var email = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.Email)?.Value ?? claims.FirstOrDefault(x => x.Type == ClaimTypes.Email)?.Value; var user = new PocedUser { UserName = Guid.NewGuid().ToString(), Email = email }; var identityResult = await _userManager.CreateAsync(user); if (!identityResult.Succeeded) { throw new Exception(identityResult.Errors.First().Description); } if (filtered.Any()) { identityResult = await _userManager.AddClaimsAsync(user, filtered); if (!identityResult.Succeeded) { throw new Exception(identityResult.Errors.First().Description); } } identityResult = await _userManager.AddLoginAsync(user, new UserLoginInfo(provider, providerUserId, provider)); if (!identityResult.Succeeded) { throw new Exception(identityResult.Errors.First().Description); } return(user); }
public async Task SignInAsync(PocedUser user, bool isPersistent) { await _signInManager.SignInAsync(user, isPersistent); }
public IdentityResult CreateIdentity(PocedUser user, string authenticationName) { return(_usersRepository.CreateIdentity(user, authenticationName)); }
public async Task <IdentityResult> CreateAsync(PocedUser user, string password) { return(await _userManager.CreateAsync(user, password)); }
public async Task <IdentityResult> CreateAsync(PocedUser user) { return(await _userManager.CreateAsync(user)); }
public async Task <IdentityResult> AddLoginAsync(PocedUser user, ExternalLoginInfo info) { return(await _userManager.AddLoginAsync(user, info)); }