/// <summary> /// Generates a JWT Token tailored to the proved user /// </summary> /// <returns>JWT Token Response</returns> public TokenResponse CreateToken(data.Entities.User user) { var now = DateTime.UtcNow; var claims = new Claim[] { new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), new Claim(JwtRegisteredClaimNames.Iat, now.ToString(), ClaimValueTypes.Integer64), new Claim("UserId", user.UserId.ToString()), new Claim("Permissions", Permissions.GetString(user.Permissions)) }; var signingCredentials = GetSigningCredentials(); var jwt = new JwtSecurityToken( issuer: _settings.Issuer, audience: _settings.Audience, claims: claims, notBefore: now, expires: now.Add(_settings.Expiration), signingCredentials: signingCredentials); var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt); var response = new TokenResponse { AccessToken = encodedJwt, ExpiresIn = DateTime.Now.AddSeconds((int)_settings.Expiration.TotalSeconds), User = UserResponse.MapFromObject(user) }; return(response); }
public static UserBasics MapFromEntity(data.Entities.User entity) { return(new UserBasics() { UserId = entity.UserId, FirstName = entity.FirstName, LastName = entity.LastName, Email = entity.Email, Permissions = entity.Permissions }); }
public data.Entities.User MapToEntity() { var user = new data.Entities.User() { FirstName = this.FirstName, LastName = this.LastName, Email = this.Email, Password = this.Password, Salt = this.Salt, Permissions = this.Permissions }; return(user); }
public async Task <ActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var UserAddresses = new List <UserAddress>() { new UserAddress() { IsDeleted = false, Address = new Address() { IsDeleted = false, City = model.City, Zip = model.Zip, State = model.State, MainAddress = model.MainAddress, DeliveryAddress = model.DeliveryAddress, Country = model.Country } } }; var user = new data.Entities.User() { Email = model.Email, FName = model.FName, LName = model.LName, Individually = model.Individually, IsDeleted = false, MName = model.MName, NationalId = model.NationalId, Phone = model.Phone, UserAddresses = UserAddresses, }; var corporateDetails = new CorporateDetails(); if (model.Individually == 2) { corporateDetails = new CorporateDetails() { CorporateName = model.CorporateName, CorporateSite = model.CorporateSite, RegistrationNo = model.RegistrationNo, user = user }; db.CorporatesDetails.Add(corporateDetails); db.SaveChanges(); } else { db.SaveChanges(); } var ASPUser = new ApplicationUser { user = user, UserName = model.Email, Email = model.Email }; var result = await UserManager.CreateAsync(ASPUser, model.Password); if (result.Succeeded) { UserManager.AddToRole(ASPUser.Id, "User"); await SignInManager.SignInAsync(ASPUser, isPersistent : false, rememberBrowser : false); EmailTemplate Email = new EmailTemplate(); string path = @"~/Common/WelcomeEmailTemplate.html"; var emailHtml = Email.ReadTemplateEmail(user, path); try { GmailSender.SendEmail("*****@*****.**", "Serious!1", new List <string>() { model.Email }, "Welcome", emailHtml, null); } catch (Exception e) { db.CorporatesDetails.Remove(corporateDetails); var logins = ASPUser.Logins; var rolesForUser = await _userManager.GetRolesAsync(ASPUser.Id); using (var transaction = context.Database.BeginTransaction()) { foreach (var login in logins.ToList()) { await _userManager.RemoveLoginAsync(login.UserId, new UserLoginInfo(login.LoginProvider, login.ProviderKey)); } if (rolesForUser.Count() > 0) { foreach (var item in rolesForUser.ToList()) { await _userManager.RemoveFromRoleAsync(ASPUser.Id, item); } } await _userManager.DeleteAsync(ASPUser); transaction.Commit(); } db.SaveChanges(); } // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=320771 // Send an email with this link // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>"); return(RedirectToAction("Index", "Home")); } AddErrors(result); } // If we got this far, something failed, redisplay form return(View(model)); }