public async Task <AuthenticateResponse> Authenticate(string userName, string password) { var res = await _loginManager.CheckAccess(userName, password); if (!res.Success) { return(null); } // Create user if not exists because login manager has greenlighed us var user = await _userManager.FindByNameAsync(userName) ?? await CreateUserInternal(new User { UserName = userName }, password); if (!user.Metadata.IsSameAs(res.Metadata)) { user.Metadata = res.Metadata; await _applicationDbContext.SaveChangesAsync(); } await SyncRoles(user); // authentication successful so generate jwt token var tokenDescriptor = await GenerateJwtToken(user); return(new AuthenticateResponse(user, tokenDescriptor.Token, tokenDescriptor.ExpiresOn)); }