forked from AcaMate/AcaMate_API
1. 인가코드 받기 2. 리다이렉트 -> 인가 코드를 엑세스 토큰으로 3. User.Me -> snsID 받아오기 4. DB 에서 snsID 조회 까지 완료
64 lines
2.4 KiB
C#
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();
|
|
|
|
}
|
|
} |