public ActionResult Login(LoginModel model, string returnUrl) { Identifier id; if (!Identifier.TryParse(model.OpenIdProvider, out id)) { ModelState.AddModelError("OpenId", "Invalid Open Id"); return(View(model)); } try { var authRequest = openid.CreateRequest(id); authRequest.AddCallbackArguments("rememberMe", model.RememberMe.ToString()); OpenIdUserData.AddClaimsRequest(authRequest); return(authRequest.RedirectingResponse.AsActionResultMvc5()); } catch (ProtocolException ex) { ModelState.AddModelError("err", ex.Message); return(View(model)); } }
private User GetOrCreateUserForOpenId(string claimedIdentifier, OpenIdUserData u) { var existing = Session.QueryOver <UserOpenId>() .Where(x => x.OpenIdentifier == claimedIdentifier) .Fetch(x => x.User).Eager .SingleOrDefault(); if (existing != null) { return(existing.User); } var newUser = new User { DisplayName = u.DisplayName ?? "Anonymous", Email = u.Email, JoinDateUTC = DateTime.UtcNow }; Session.Save(newUser); Session.Save(new UserOpenId { User = newUser, OpenIdentifier = claimedIdentifier }); return(newUser); }
public static OpenIdUserData CreateFromResponse(IAuthenticationResponse r) { var userData = new OpenIdUserData(); var claimsResponse = r.GetExtension <ClaimsResponse>(); if (claimsResponse != null) { userData.Email = claimsResponse.Email; userData.DisplayName = claimsResponse.Nickname ?? claimsResponse.FullName; } return(userData); }
public ActionResult Login(string returnUrl) { var response = openid.GetResponse(); if (response == null) { return(View(new LoginModel())); } //check the response status switch (response.Status) { //success status case AuthenticationStatus.Authenticated: var userData = OpenIdUserData.CreateFromResponse(response); var user = GetOrCreateUserForOpenId(response.ClaimedIdentifier, userData); bool rememberMe; bool.TryParse(response.GetCallbackArgument("rememberMe"), out rememberMe); SetUserAuthCookie(user, rememberMe); if (Url.IsLocalUrl(returnUrl)) { return(Redirect(returnUrl)); } else { return(RedirectToAction("Index", "Home")); } case AuthenticationStatus.Canceled: ModelState.AddModelError("err", "Canceled at provider"); break; case AuthenticationStatus.Failed: ModelState.AddModelError("err", response.Exception.Message); break; } return(View(new LoginModel())); }