/// <summary> /// Signs in user /// </summary> /// <param name="userToLogin">Username and password of user</param> /// <returns>Generated token or errors that occured during sign in process</returns> public async Task <IServiceResult <string> > LoginAsync(UserToLoginDto userToLogin) { try { UserModel user = (await _unitOfWork.Users.GetByExpressionAsync(x => x.UserName.ToLower() == userToLogin.Username.ToLower())).SingleOrDefault(); if (user != null) { SignInResult loginResult = await _signInManager.CheckPasswordSignInAsync(user, userToLogin.Password, false); if (loginResult.Succeeded) { IList <string> usersRoles = await _signInManager.UserManager.GetRolesAsync(user); using (IJsonWebTokenProvider jwtProvider = new JsonWebTokenProvider(_configuration)) { string token = jwtProvider.GenerateJwtBearer(user, usersRoles); return(new ServiceResult <string>(ResultType.Correct, token)); } } } return(new ServiceResult <string>(ResultType.Error, new List <string> { "Incorrect username or password" })); } catch (Exception e) { return(new ServiceResult <string>(ResultType.Unauthorized, new List <string> { e.Message })); } }
private static int GenerateToken(DefaultOptions options, JsonWebTokenProvider provider) { // Validate if (!TimeParser.TimeParser.TryParseTimeString(options.ExpiryTime, out var expiry)) { throw new UserErrorException($"Cannot parse time string: '{options.ExpiryTime}'"); } var claims = options.Claims.Select(cStr => { var parts = cStr.Split(':'); if (parts.Length != 2) { throw new UserErrorException($"Claim '{cStr}' is not in a valid format: 'claimName:claimValue'."); } return(claim: parts[0], value: parts[1]); }).ToArray(); Console.WriteLine(provider.GetTokenFor( options.Subject, claims, expiry, options.Issuer, options.Audience )); if (!string.IsNullOrWhiteSpace(options.SaveAs)) { SaveProfile(options); } return(0); }