public async Task <ActionResult <UserJwtResponse> > CompleteTwitterAuthenticationAsync( [FromBody] CompleteTwitterAuthenticationRequest request ) { var loginToken = HttpContext.Session.GetString(TwitterOauthTokenKey); if (loginToken == null) { return(BadRequest()); } var accessToken = await _twitterClient.GetAccessTokenAsync(loginToken, request.OAuthToken, request.OauthVerifier); var currentUserId = HttpContext.Session.GetCurrentUserId(); if (currentUserId.HasValue) { await _socialMediaUserLinkService.AssociateUserToTwitterIdAsync(currentUserId.Value, accessToken.UserId); } var user = await _socialMediaUserLinkService.GetOrCreateUserFromTwitterAsync(accessToken.ScreenName, accessToken.UserId); HttpContext.Session.SetCurrentUserId(user.Id); var token = _jwtService.GenerateJwtToken(user.Id); return(new UserJwtResponse { Token = token, UserInfo = _mapper.Map <UserInfoResponse>(user) }); }