public async Task <IActionResult> ExternalLoginCallback(string returnUrl = null) { var externalId = SignInManager.GetExternalIdentity("Cookies"); // check external identity - e.g. to see if registration is required // or to associate account with current login etc // name identifier is the unique id of the user in the context of the external provider var nameId = externalId.Result.FindFirst(ClaimTypes.NameIdentifier).Value; var name = externalId.Result.FindFirst(ClaimTypes.Name).Value; var email = externalId.Result.FindFirst(ClaimTypes.Email).Value; long userId = 0; var appUser = UserService.GetUserByEmail(email); if (appUser != null) { await SignInManager.SignInAsync(new AppUser { UserName = name, Email = email, Id = appUser.Id }); userId = appUser.Id; } else { var newUser = new Data.Models.Core.User() { Email = email, UserName = name.Replace(" ", ""), PasswordHash = PasswordService.CreateRandomPassword(6), }; //Create new user in database var newUserId = UserService.CreateUserReturningId(newUser); if (newUserId > 0) { var newAppUser = new AppUser() { UserName = newUser.UserName, Email = newUser.Email, Id = newUserId }; await SignInManager.SignInAsync(newAppUser); } userId = newUserId; } //TODO delete temp cookie //await HttpContext.Authentication.SignOutAsync("Temp"); return(Redirect(Url.Action("Get", "Profile", new { id = userId }))); }
public async Task<IActionResult> ExternalLoginCallback(string returnUrl = null) { var externalId = SignInManager.GetExternalIdentity("Cookies"); // check external identity - e.g. to see if registration is required // or to associate account with current login etc // name identifier is the unique id of the user in the context of the external provider var nameId = externalId.Result.FindFirst(ClaimTypes.NameIdentifier).Value; var name = externalId.Result.FindFirst(ClaimTypes.Name).Value; var email = externalId.Result.FindFirst(ClaimTypes.Email).Value; long userId = 0; var appUser = UserService.GetUserByEmail(email); if (appUser != null) { await SignInManager.SignInAsync(new AppUser { UserName = name, Email = email, Id = appUser.Id }); userId = appUser.Id; } else { var newUser = new Data.Models.Core.User() { Email = email, UserName = name.Replace(" ", ""), PasswordHash = PasswordService.CreateRandomPassword(6), }; //Create new user in database var newUserId = UserService.CreateUserReturningId(newUser); if (newUserId > 0) { var newAppUser = new AppUser() { UserName = newUser.UserName, Email = newUser.Email, Id = newUserId }; await SignInManager.SignInAsync(newAppUser); } userId = newUserId; } //TODO delete temp cookie //await HttpContext.Authentication.SignOutAsync("Temp"); return Redirect(Url.Action("Get", "Profile", new { id = userId })); }
public long CreateUserReturningId(Data.Models.Core.User dbUser) { return(new DbContext().User.Create(dbUser)); }