简体   繁体   中英

django allauth social authentication retrieved email matches an existing user's email?

This is my first post in Stack exchange, I am Python and Django Noob trying to develop an application. The application uses django-registration for user registration and then I started plugging in 'social' authentication. I chose allauth as it has the ability to perform authentication among'st other things.

I have hit the same problem that was presented in this thread: django allauth facebook redirects to signup when retrieved email matches an existing user's email?

user login/signup failing if the user with same email address already exists in the database(due to registration with local registration path). I tried the solution provided in the above post and have issues. Looking for some help and advise here.

I have exactly the same code as above in my socialadapter.py under the following path

myproject/allauth/socialaccount/socialadapter.py

I have the following in my settings

LOGIN_URL = '/'
#LOGIN_REDIRECT_URL = '/'
LOGIN_REDIRECT_URL = "/users/{id}/mytags"
SOCIALACCOUNT_QUERY_EMAIL = True


ACCOUNT_AUTHENTICATION_METHOD='username_email'
SOCIALACCOUNT_EMAIL_REQUIRED = False

#create and use specific adapter to handle the issue reported here
# https://github.com/pennersr/django-allauth/issues/418

ACCOUNT_ADAPTER = "myproject.allauth.socialaccount.MyLoginAccountAdapter"
SOCIALACCOUNT_ADAPTER = 'myproject.allauth.socialaccount.MySocialAccountAdapter'

On starting the runserver and accessing the facebook/login , I see the following issue

[17/Jul/2014 11:49:43] "GET /myproject/accounts2/facebook/login/ HTTP/1.1" 500 59
---------------------------------------- Exception happened during processing of request from ('127.0.0.1', 58805) Traceback (most recent call last):   File "C:\Python27\Lib\SocketServer.py", line 593, in process_request_thread
    self.finish_request(request, client_address)   File "C:\Python27\Lib\SocketServer.py", line 334, in finish_request
    self.RequestHandlerClass(request, client_address, self)   File "C:\Python27\lib\site-packages\django\core\servers\basehttp.py", line 139, in __init__
    super(WSGIRequestHandler, self).__init__(*args, **kwargs)   File "C:\Python27\Lib\SocketServer.py", line 651, in __init__
    self.finish()   File "C:\Python27\Lib\SocketServer.py", line 710, in finish
    self.wfile.close()   File "C:\Python27\Lib\socket.py", line 279, in close
    self.flush()   File "C:\Python27\Lib\socket.py", line 303, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size]) error: [Errno 10053] An established connection was aborted by the software in your host machine
---------------------------------------- ERROR:django.request:Internal Server Error: /myproject/accounts2/facebook/login/callback/ Traceback (most recent call last):   File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 109, in get_response
    response = callback(request, *callback_args, **callback_kwargs)   File "myproject\allauth\socialaccount\providers\oauth2\views.py", line 51, in view
    return self.dispatch(request, *args, **kwargs)   File "myproject\allauth\socialaccount\providers\oauth2\views.py", line 98, in dispatch
    response=access_token)   File "myproject\allauth\socialaccount\providers\facebook\views.py", line 43, in complete_login
    return fb_complete_login(request, app, access_token)   File "myproject\allauth\socialaccount\providers\facebook\views.py", line 31, in fb_complete_login
    .sociallogin_from_response(request, extra_data)   File "myproject\allauth\socialaccount\providers\base.py", line 44, in sociallogin_from_response
    adapter = get_adapter()   File "myproject\allauth\socialaccount\adapter.py", line 150, in get_adapter
    return import_attribute(app_settings.ADAPTER)()   File "myproject\allauth\utils.py", line 97, in import_attribute
    ret = getattr(importlib.import_module(pkg), attr) AttributeError: 'module' object has no attribute 'MySocialAccountAdapter' [17/Jul/2014 11:49:46] "GET /myproject/accounts2/facebook/login/callback/?code=AQBShGWTHnGVvlo-fOVW7xjF9RUJo-k7P23zISHC70p aAR5uWYpnI46gpHFUCC5Rz-SviDyTITVRAUkZ-DhkZaHyBT2n5UBhhSwkACgCKTTgPrFLAZFBQs05AEZ67xfk-wRlF47DSjT26bbDdUmc1ptfFxP3W4qS5Y6b5Yrj iLTI3RMScOEM0EKUQjNySyj4XSAVk6wj4HcAbCVxiVv5QaH63ayxyt5Y5jQ0AOH3zsCngPaqFNJArXseMS6wfqSc8yDwcwWZKo1nGhcNtA9Gy_bqZNiTZSjPJguhT lBwbmDAJ9SUNI8AS3yzC-AKDtD2_bo&state=441rn77wUuLH HTTP/1.1" 500 147978

Initially the socialadapter.py would not even compile,all others did compile even after deleting the .pyc I referred to this thread: pycompile for python3.2

and force compile but I still see the issue

Any suggestions on what I might be doing wrong here is greatly appreciated.

thank you for your valuable time.

-km

EDIT:

Environment

  • Python 2.7.5

  • allauth: 0.17

Ok I figured out the issue , I had the settings entry for my adapter missing a the full path to the class. Now I am able to login using Facebook.

However I have another issue, I am trying to enable Linked in login for the same app and have the following entries in the settings

    SOCIALACCOUNT_PROVIDERS = \
{'linkedin':{'SCOPE': [ 'r_emailaddress',
                'r_fullprofile',
                'r_emailaddress',
                'r_contactinfo',
                'r_network'],
      'PROFILE_FIELDS':
            [
                'id',
                'first-name',
                'last-name',
                'email-address',
                'picture-url',
                'public-profile-url',
                'skills',
                'headline',
                'industry',
                'num-connections',
                'positions',
                'interests',
                'languages',
                'certifications',
                'educations',
                'courses',
                'three-current-positions',
                'three-past-positions',
                'recommendations-received',
                'honors-awards'
            ]
    },
 'facebook': {'SCOPE': ['email', 'user_about_me', 'user_birthday',
                            'user_education_history','user_work_history',
                            'user_hometown',
                            'user_location',
                            'user_religion_politics','user_subscriptions',
                            'read_stream',
                            'read_insights',
                            'read_friendlists',
                            'user_likes',
                            'user_interests',
                            'user_groups'
                            ],
                  'AUTH_PARAMS': {},
                  'METHOD': 'oauth2'
                },
}

Now When I use the login page, I get the following error

[17/Jul/2014 22:26:28] "GET /myproject/accounts2/linkedin/login/?process=connect HTTP/1.1" 302 0
ERROR:django.request:Internal Server Error: /myproject/accounts2/linkedin/login/callback/
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 109, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "myproject\allauth\socialaccount\providers\oauth\views.py", line 35, in view
    return self.dispatch(request, *args, **kwargs)
  File "myproject\allauth\socialaccount\providers\oauth\views.py", line 90, in dispatch
    return complete_social_login(request, login)
  File "myproject\allauth\socialaccount\helpers.py", line 113, in complete_social_login
    sociallogin=sociallogin)
  File "C:\Python27\lib\site-packages\django\dispatch\dispatcher.py", line 172, in send
    response = receiver(signal=self, sender=sender, **named)
  File "myproject\allauth\socialaccount\socialadapter.py", line 50, in link_to_local_user
    email_address = sociallogin.account.extra_data['email']
KeyError: 'email'
[17/Jul/2014 22:26:50] "GET /myproject/accounts2/linkedin/login/callback/?oauth_token=77--d223fb8b-168f-4260-b93c-1a6e5ff2
e1e1&oauth_verifier=52724 HTTP/1.1" 500 139897

I am not sure how to fix this because the SCOPE for LinkedIn has : 'email-address', how can I fix this issue as the Email Fields in LinkedIn Documentation also says email-address

LinkedIn fields

Any suggestions are appreciated.

I am sorry I do not know how to put a bounty on the question and I do not have enough to place for the question also.

TIA

-km

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM