public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model) { if (User.Identity.IsAuthenticated) return RedirectToRole(); if (ModelState.IsValid) { var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); if (loginInfo == null) return View("ExternalLoginFailure"); string pictureUrl = "/img/profiles/default.png"; char? gender = null; string genderValue = loginInfo.ExternalIdentity.FindFirstValue(ClaimTypes.Gender); if (genderValue != null) gender = genderValue.First(); if (loginInfo.Login.LoginProvider == "Google") { string url = loginInfo.ExternalIdentity.FindFirstValue("picture"); if (!string.IsNullOrEmpty(url)) pictureUrl = HtmlHelpers.ResizeGoogleProfilePicture(url, 200); } else if(loginInfo.Login.LoginProvider == "Facebook") { var profileId = loginInfo.ExternalIdentity.FindFirstValue(ClaimTypes.NameIdentifier); if (profileId != null) pictureUrl = string.Format("https://graph.facebook.com/{0}/picture?width=200&height=200", profileId); } var AppMember = new AppMember { UserName = model.Email, Email = model.Email, FirstName = model.FirstName, LastName = model.LastName, PictureUrl = pictureUrl, Gender = gender }; var result = await userManager.CreateAsync(AppMember); if (result.Succeeded) { result = await userManager.AddLoginAsync(AppMember.Id, loginInfo.Login); if (result.Succeeded) { await userManager.AddToRoleAsync(AppMember.Id, "Autor"); await signInManager.SignInAsync(AppMember, isPersistent: false, rememberBrowser: false); return RedirectToLocal(model.ReturnUrl); } } AddError("Email", Translations.Account.AlreadyRegisteredAccount); } return View(model); }
public async Task<ActionResult> ExternalLoginCallback(string returnUrl) { var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); if (loginInfo == null) return RedirectToAction("Login"); string provider = loginInfo.Login.LoginProvider; //Active Directory var tenantId = loginInfo.ExternalIdentity.FindFirstValue("http://schemas.microsoft.com/identity/claims/tenantid"); if (tenantId != null) { if (tenantId == "af2fd196-1d9f-47b4-9069-391a46f83601") { loginInfo.Email = loginInfo.DefaultUserName; provider = "UNITEC"; } else if (tenantId == "c02b08b6-4ca2-448d-8743-12973eb499ff") provider = "Microsoft"; } // Sign in the AppMember with this external login provider if the AppMember already has a login var result = await signInManager.ExternalSignInAsync(loginInfo, isPersistent: false); switch (result) { case SignInStatus.Success: return RedirectToLocal(returnUrl); case SignInStatus.LockedOut: return View("Lockout"); case SignInStatus.RequiresVerification: return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = false }); case SignInStatus.Failure: default: var model = new ExternalLoginConfirmationViewModel(); model.Email = loginInfo.Email ?? string.Empty; model.FirstName = HtmlHelpers.CapitalizeString(loginInfo.ExternalIdentity.FindFirstValue(ClaimTypes.GivenName)); model.LastName = HtmlHelpers.CapitalizeString(loginInfo.ExternalIdentity.FindFirstValue(ClaimTypes.Surname)); model.LoginProvider = provider; model.ReturnUrl = returnUrl; return View("ExternalLoginConfirmation", model); } }