AcaMate_API/Program/Controllers/V1/OutController.cs
Seonkyu.kim 65962c01c2 [] 카카오 로그인 구현
1. 인가코드 받기
2. 리다이렉트 -> 인가 코드를 엑세스 토큰으로
3. User.Me -> snsID 받아오기
4. DB 에서 snsID 조회 까지 완료
2025-05-29 17:53:50 +09:00

64 lines
2.4 KiB
C#

using System.Text.Json;
using Back.Program.Controllers.V1;
using Back.Program.Services.V1;
using Back.Program.Services.V1.Interfaces;
using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc;
namespace Back.Program.Controllers;
[ApiController]
[Route("/api/v1/out/user")]
[ApiExplorerSettings(GroupName = "외부 동작(사용자)")]
public class OutController: ControllerBase
{
private readonly ILogger<OutController> _logger;
private readonly IRepositoryService _repositoryService;
private readonly IUserService _userService;
private readonly IKakaoService _kakaoService;
public OutController(ILogger<OutController> logger,
IRepositoryService repositoryService, IUserService userService, IKakaoService kakaoService)
{
_logger = logger;
_repositoryService = repositoryService;
_userService = userService;
_kakaoService = kakaoService;
}
[HttpGet("kakao/auth")]
[CustomOperation("카카오 로그인", "카카오 로그인 동작", "사용자")]
public async Task<IActionResult> KakaoLogin([FromQuery] string? scope)
{
var url = await _kakaoService.GetAuthorizationUrl(scope ?? "");
Console.WriteLine($"카카오 로그인 API: {url}");
return Ok(new { url });
}
[HttpGet("kakao/redirect")]
public async Task<IActionResult> RedirectFromKakao([FromQuery] string code)
{
var (success, response) = await _kakaoService.Redirect(code);
Console.WriteLine($"리다이렉트 : {response}");
if (success)
{
// HttpContext.Session.SetString("AccessToken", response);
var (idSuccess, idResponse) = await _kakaoService.UserMe(response);
if (idSuccess)
{
var json = JsonDocument.Parse(idResponse);
if (json.RootElement.TryGetProperty("id", out var idElement))
{
var snsId = idElement.ToString();
Console.WriteLine($"ID = {snsId}");
var loginResult = await _userService.Login("SNS Login", "ST01", snsId);
Console.WriteLine($"login = {loginResult.JsonToString()}");
// return Ok(new { id="cc" });
}
}
Console.WriteLine($"ID_res = {idResponse}");
}
return BadRequest();
}
}