wagnerdelima / drf-social-oauth2

drf-social-oauth2 makes it easy to integrate Django social authentication with major OAuth2 providers, i.e., Facebook, Twitter, Google, etc.
https://drf-social-oauth2.readthedocs.io/en/latest/
MIT License
271 stars 34 forks source link

How to associate an existing user with multiple social accounts (different emails)? [DRF_SOCIAL_OAUTH2] #143

Closed sawohnmarshwe closed 1 year ago

sawohnmarshwe commented 1 year ago

I'm trying to associate user with multiple social accounts in Django Rest Framework. After user login, user can associate with social accounts (it doesn't matter same email or different email). Now I am using the library drf-social-oauth2. I have done signIn/singUp part. According to Social_Auth_Pipeline [https://python-social-auth.readthedocs.io/en/latest/pipeline.html] I added this code to associate user

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', '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', ) The endpoint "http://localhost:8000/auth/convert-token" can handle the singin/singup using social auth.(eg. Facebook, Google) social_core.pipeline.social_auth.associate_by_email managed to associate the user if same email.

My Question is How can I connect/associate Social Accounts (* different email/same email) with current login user using drf_social_oauth2?

Do I need to add field in user table to associate? OR Do I need to add something to setting.py?... Please advise me. Thank you.

wagnerdelima commented 1 year ago

Hi @sawohnmarshwe,

Unfortunately, drf-social-oauth2 is not able to handle cases where the email is not equal. The user is identified by the email address. A different email address is understood as a completely different user.

wagnerdelima commented 1 year ago

@sawohnmarshwe just reiterating here. You can associate multiple accounts where the email is equal by setting social_core.pipeline.social_auth.associate_by_email in your pipeline workflow. It's not possible where the email address is not the same because each backend returns their own username to you, therefore, this type of validation would not be possible.