class GithubLogIn(APIView):
def post(self, request):
try:
code = request.data.get("code")
access_token = requests.post(
f"https://github.com/login/oauth/access_token?code={code}&client_id=5195598d392601f20eea&client_secret={settings.GH_SECRET}",
headers={"Accept": "application/json"},
)
access_token = access_token.json().get("access_token")
user_data = requests.get(
"https://api.github.com/user",
headers={
"Authorization": f"Bearer {access_token}",
"Accept": "application/json",
},
)
user_data = user_data.json()
user_emails = requests.get(
"https://api.github.com/user/emails",
headers={
"Authorization": f"Bearer {access_token}",
"Accept": "application/json",
},
)
user_emails = user_emails.json()
try:
user = User.objects.get(email=user_emails[0]["email"])
login(request, user)
return Response(status=status.HTTP_200_OK)
except User.DoesNotExist:
user = User.objects.create(
username=user_data.get("login"),
email=user_emails[0]["email"],
name=user_data.get("name"),
avatar=user_data.get("avatar_url"),
)
user.set_unusable_password()
user.save()
login(request, user)
return Response(status=status.HTTP_200_OK)
except Exception:
return Response(status=status.HTTP_400_BAD_REQUEST)
깃허브로 로그인 하기 : 사용자가 장고로 요청을 보냄 > 장고는 사용자를 깃허브로그인 url로 보냄 > 사용자가 깃허브로 본인 정보를 허락하면 장고는 깃허브와 api를 시작함... = 장고는 깃허브에게 유저 정보를 요청함 > 깃허브는 장고로 정보를 넘겨줌 > 정보를 넘겨받은 장고는 유저를 로그인시키고 db에 저장함