public async Task <IHttpActionResult> Register(RegisterBindingModel model) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var extendUser = new Model.Model.UserExtend(); var user = new ApplicationUser() { UserName = model.Email, Email = model.Email, FirstName = model.FirstName, LastName = model.LastName, Gender = model.Gender, Birthday = model.Birthday, City = model.City, User = extendUser, SecurityStamp = "101010101010" }; IdentityResult result = await UserManager.CreateAsync(user, model.Password); if (!result.Succeeded) { return(GetErrorResult(result)); } await UserManager.AddToRoleAsync(user.Id, model.RoleName); string code = await this.UserManager.GenerateEmailConfirmationTokenAsync(user.Id); var callbackUrl = new Uri(Url.Link("ConfirmEmailRoute", new { userId = user.Id, code = code })); try { await this.UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>"); } catch (Exception) { return(BadRequest()); } return(Ok()); }
public async Task <IHttpActionResult> RegisterExternal() { var info = await Authentication.GetExternalLoginInfoAsync(); if (info == null) { return(InternalServerError()); } string firstName; string lastName; string gender; if (info.Login.LoginProvider == "Google") { var externalIdentity = Authentication.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie); lastName = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Surname).Value; firstName = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.GivenName).Value; // birthday = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.DateOfBirth).Value; gender = "male"; } else { var accessToken = Authentication.GetExternalIdentity(DefaultAuthenticationTypes.ExternalCookie).FindFirstValue("FacebookAccessToken"); var fb = new FacebookClient(accessToken); // dynamic aaa = fb.Get("/me"); dynamic myInfo = fb.Get("/me?fields=id,email,first_name,last_name,gender"); lastName = myInfo["last_name"]; firstName = myInfo["first_name"]; gender = myInfo["gender"]; } Gender _gender = Gender.MALE; if (gender.Equals("female")) { _gender = Gender.FEMALE; } var userExtend = new Model.Model.UserExtend(); var user = new ApplicationUser() { UserName = info.Email, Email = info.Email, FirstName = firstName, LastName = lastName, User = userExtend, EmailConfirmed = true, Birthday = null, Gender = _gender }; try { IdentityResult result = await UserManager.CreateAsync(user); if (!result.Succeeded) { return(GetErrorResult(result)); } result = await UserManager.AddLoginAsync(user.Id, info.Login); if (!result.Succeeded) { return(GetErrorResult(result)); } result = await UserManager.AddToRoleAsync(user.Id, "User"); if (!result.Succeeded) { return(GetErrorResult(result)); } ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(UserManager, OAuthDefaults.AuthenticationType); ClaimsIdentity cookieIdentity = await user.GenerateUserIdentityAsync(UserManager, CookieAuthenticationDefaults.AuthenticationType); var role = oAuthIdentity.Claims.Where(c => c.Type == ClaimTypes.Role).FirstOrDefault().Value; var userId = oAuthIdentity.Claims.Where(c => c.Type == ClaimTypes.NameIdentifier).FirstOrDefault().Value; AuthenticationProperties properties = ApplicationOAuthProvider.CreateProperties(user.UserName, role, userId); Authentication.SignIn(properties, oAuthIdentity, cookieIdentity); return(Ok(properties.Dictionary)); } catch (Exception) { return(BadRequest()); } }