public ActionResult ExternalLoginCallback(string returnUrl) { string callbackUrl = this.Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }); var result = OAuthWebSecurity.VerifyAuthentication(callbackUrl); if (!result.IsSuccessful) { return(this.RedirectToAction("ExternalLoginFailure")); } if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, this.Config.CreatePersistentCookie)) { string username = OAuthWebSecurity.GetUserName(result.Provider, result.ProviderUserId); return(this.PostSuccessfulLogin(username, returnUrl)); } if (this.User.Identity.IsAuthenticated) { // If the current user is logged in add the new account OAuthWebSecurity.CreateOrUpdateAccount(result.Provider, result.ProviderUserId, this.User.Identity.Name); string username = OAuthWebSecurity.GetUserName(result.Provider, result.ProviderUserId); return(this.PostSuccessfulLogin(username, returnUrl)); } else { // User is new, ask for their desired membership name string loginData = OAuthWebSecurity.SerializeProviderUserId(result.Provider, result.ProviderUserId); this.ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName; this.ViewBag.ReturnUrl = returnUrl; var registrationModel = new ExternalLoginRegistrationModel <TUserProfileViewModel> { UserProfileViewModel = new TUserProfileViewModel(), ExternalLoginData = loginData }; registrationModel.UserProfileViewModel.Username = result.UserName; return(this.View("ExternalLoginConfirmation", registrationModel)); } }
public ActionResult ExternalLoginConfirmation(ExternalLoginRegistrationModel <TUserProfileViewModel> registrationModel, string returnUrl) { string provider = null; string providerUserId = null; if (this.User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(registrationModel.ExternalLoginData, out provider, out providerUserId)) { return(this.RedirectToAction("Manage")); } if (this.ModelState.IsValid) { //// Insert a new user into the database var profile = this.Repository.GetByUsername(registrationModel.UserProfileViewModel.Username); // Check if user already exists if (profile == null) { profile = this.CreateUserProfile(registrationModel.UserProfileViewModel); OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, profile.Username); OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false); return(this.PostSuccessfulLogin(profile.Username, returnUrl)); } else { this.ModelState.AddModelError( Of <TUserProfileViewModel> .CodeNameFor(m => m.Username), "User name already exists. Please enter a different user name."); } } this.ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName; this.ViewBag.ReturnUrl = returnUrl; return(this.View(registrationModel)); }