2014-02-17 2 views
2

나는 django와 함께 python-social-auth를 사용하고 있습니다. 페이스 북을 통해 권한을 부여하고 싶습니다만, 이전에 이미 페이스 북에서 사용하는 이메일과 함께 기본 방식 (이메일, 비밀번호)으로 등록했습니다. Facebook 계정과 등록 된 계정을 연결할 수 있습니까? 검색하려고했지만 아무 것도 없습니다.python social auth 중복 입력

답변

4

확인 방법을 설명하는 Associate users by email을 확인하십시오.

때로는 이메일이 이미 사용자 계정과 일치하는 경우 사회 계정이 자동으로 연결하는 것이 바람직의 이메일

준 사용자.

예를 들어, 사용자가 Facebook 계정에 가입 한 다음 로그 아웃 한 후 다음 번에 Google OAuth2를 사용하여 로그인하려고하면 두 소셜 사이트가 동일한 이메일 주소로 구성된 경우 사용자가 페이스 북 백엔드가 만든 초기 계정으로 들어갑니다.

이 시나리오는이처럼 associate_by_email 파이프 라인 기능을 가능하게함으로써 가능하다 : 그것은 모든 백엔드에이 프로세스를 자동화하기 위해 100 % 안전하지 때문에

SOCIAL_AUTH_PIPELINE = (
    'social_core.pipeline.social_auth.social_details', 
    'social_core.pipeline.social_auth.social_uid', 
    'social_core.pipeline.social_auth.auth_allowed', 
    'social_core.pipeline.social_auth.social_user', 
    'social_core.pipeline.user.get_username', 
    'social_core.pipeline.social_auth.associate_by_email', # <--- enable this one 
    'social_core.pipeline.user.create_user', 
    'social_core.pipeline.social_auth.associate_user', 
    'social_core.pipeline.social_auth.load_extra_data', 
    'social_core.pipeline.user.user_details', 
) 

이 기능은 기본적으로 비활성화되어 있습니다. 모든 제공 업체가 귀하의 이메일 계정을 확인하는 것은 아니며 사용자가이를 활용할 수있는 다른 사용자도 있습니다.

예를 들어 귀하의 사이트에 등록 된 사용자 A는 [email protected]이라는 전자 메일을 사용합니다. 그런 다음 악의적 인 사용자가 동일한 계정으로 이메일을 확인하지 않는 다른 제공 업체에 등록합니다. 마지막으로이 사용자는 귀하의 사이트 (해당 공급자를 지원함)로 가서 서명하고 전자 메일이 같기 때문에 악의적 인 사용자가 사용자 A 계정을 제어하게됩니다.

편집 :이 대답에 수정 된 내용을 복사하여 복사하십시오.

+0

로그인해야합니까? 그렇지 않으면 새 계정이 만들어지고 중복 전자 메일 주소가 생겨 예외가 발생합니다. – un33k

+0

@ValNeekman, 아니요, 이메일 연결은 로그 아웃 한 사용자에게만 적용됩니다. PSA가 어느 이메일을 사용할지 알지 못하기 때문에 주어진 이메일이 둘 이상의 계정에서 이미 사용되면 예외가 발생합니다. – omab

+0

확실합니까?, associate_by_email에 대한 코드를 살펴 보았습니다. 0 전자 메일에 대해 None을 반환하고 둘 이상의 전자 메일에 대해 AuthException을 발생시키고 정확히 하나의 전자 메일이 발견되면 사용자를 반환합니다. 필자의 경우 Google에 가입하고 로그 아웃 한 다음 내 Gmail 계정이있는 Facebook에 가입하고 같은 이메일 주소로 생성 된 두 번째 계정을 얻습니다. 나는 AuthException을 잡기는하지만, 내 경우에 인상되지 않는다. 사용자가 로그인하면 모든 것이 제대로 작동하지만 로그인하지 않은 경우 내 DB에 전자 메일 항목이 중복되지 않도록하고 싶습니다. thx – un33k