편집 기록

편집 기록
  • 프로필 엽토군님의 편집
    날짜2020.04.28

    장고에서 깃허브를 통한 로그인 연동 구현시 발생 에러 질문


    로그인 화면과 회원가입화면에서 깃헙 로그인을 클릭하면 "NOT NULL constrain failed: users_user.username"아라고 출력됩니다.

    깃헙에 가서 제 이메일을 public으로 설정했는데도 에러 메시지에 이메일이 none으로 나오더라구요,, 혹시 이유를 아시는 분 계실까요

    제 이메일 공개로 설정했는데, 혹시 방법이 잘못되었을까요? settings -> Emails로 가서 Visible in emails로 설정했습니다.

    def github_login(request):
        client_id = os.environ.get("GH_ID")
        redirect_uri = "http://127.0.0.1:9000/users/login/github/callback"
        return redirect(
            f"https://github.com/login/oauth/authorize?client_id={client_id}&redirect_uri={redirect_uri}&scope=read:user"
        )
    
    
    class GithubException(Exception):
        pass
    
    
    def github_callback(request):
        try:
            client_id = os.environ.get("GH_ID")
            client_secret = os.environ.get("GH_SECRET")
            code = request.GET.get("code", None)
            if code is not None:
                result = requests.post(
                    f"https://github.com/login/oauth/access_token?client_id={client_id}&client_secret={client_secret}&code={code}",
                    headers={"Accept": "application/json"},
                )
                result_json = result.json()
                error = result_json.get("error", None)
                if error is not None:  # 에러가 있다면,
                    raise GithubException()
                else:
                    access_token = result_json.get("access_token")
                    profile_request = requests.get(
                        f"https://api.github.com/user",
                        headers={
                            "Authorization": f"token {access_token}",
                            "Accept": "application/json",
                        },
                    )
                    profile_json = profile_request.json()
                    username = profile_json.get("login", None)
                    if username is not None:
                        name = profile_json.get("name")
                        if name is None:
                            name = "None"
                        email = profile_json.get("email")
                        if email is None:
                            email = "None"
                        bio = profile_json.get("bio")
                        if bio is None:
                            bio = "None"
                        try:
                            user = models.User.objects.get(email=email)
                            if user.login_method != models.User.LOGIN_GITHUB:
                                raise GithubException()
                        except models.User.DoesNotExist:
                            user = models.User.objects.create(
                                email=email,
                                first_name=name,
                                username=email,
                                bio=bio,
                                login_method=models.User.LOGIN_GITHUB,
                                email_verified=True,
                            )
                            user.set_unusable_password()
                            user.save()
                        login(request, user)  # 로그인 시킴
                        return redirect(reverse("core:home"))
    
                    else:
                        raise GithubException()
                    # print(api_request.json())
            else:
                raise GithubException()
        except GithubException:
            return redirect(reverse("users:login"))
    
  • 프로필 yubin cho님의 편집
    날짜2020.04.26

    장고에서 깃허브를 통한 로그인 연동 구현시 발생 에러 질문


    로그인 화면과 회원가입화면에서 깃헙 로그인을 클릭하면 "NOT NULL constrain failed: users_user.username"아라고 출력됩니다.

    깃헙에 가서 제 이메일을 public으로 설정했는데도 에러 메시지에 이메일이 none으로 나오더라구요,, 혹시 이유를 아시는 분 계실까요

    제 이메일 공개로 설정했는데, 혹시 방법이 잘못되었을까요? settings -> Emails로 가서 Visible in emails로 설정했습니다.