Beispiel #1
0
        public async Task <ActionResult <UserJwtResponse> > CompleteMicrosoftAuthenticationAsync(
            [FromBody] CompleteMicrosoftAuthenticationRequest request
            )
        {
            var loginToken = HttpContext.Session.GetString(MicrosoftLoginTokenKey);

            if (loginToken != request.LoginToken)
            {
                return(BadRequest());
            }

            var accessToken = await _microsoftGraphClient.GetAccessTokenAsync(request.RedirectUri, request.Code);

            var profile = await _microsoftGraphClient.GetUserProfileAsync(accessToken);

            var currentUserId = HttpContext.Session.GetCurrentUserId();

            if (currentUserId.HasValue)
            {
                await _socialMediaUserLinkService.AssociateUserToMicrosoftIdAsync(currentUserId.Value, profile.Id);
            }

            var user = await _socialMediaUserLinkService.GetOrCreateUserFromMicrosoftAsync(profile.Name, profile.Id);

            HttpContext.Session.SetCurrentUserId(user.Id);
            var token = _jwtService.GenerateJwtToken(user.Id);

            return(new UserJwtResponse
            {
                Token = token,
                UserInfo = _mapper.Map <UserInfoResponse>(user)
            });
        }