def oauth_authenticated(request): token = oauth.Token( request.session['request_token']['oauth_token'], request.session['request_token']['oauth_token_secret'] ) if 'oauth_verifier' in request.GET: token.set_verifier(request.GET['oauth_verifier']) client = oauth.Client(consumer, token) resp, content = client.request(access_token_url, "GET") if resp['status'] != '200': raise Exception("Invalid response from LinkedIn.") access_token = dict(cgi.parse_qsl(content)) headers = {'x-li-format': 'json'} fields = [ 'id', 'first-name', 'last-name', 'email-address', ] url = "http://api.linkedin.com/v1/people/~:(%s)" % ','.join(fields) token = oauth.Token( access_token['oauth_token'], access_token['oauth_token_secret'] ) client = oauth.Client(consumer, token) resp, content = client.request(url, "GET", headers=headers) profile = json.loads(content) # Step 3: lookup the user or create them if they don't exist. firstname = profile['firstName'] lastname = profile['lastName'] identifier = profile['id'] email = profile['emailAddress'] try: user = User.objects.get(username=identifier) except User.DoesNotExist: user = User.objects.create_user( identifier, email, access_token['oauth_token_secret'] ) user.first_name = firstname user.last_name = lastname user.save() # Save our permanent token and secret for later. userprofile = UserProfile() userprofile.user = user userprofile.oauth_token = access_token['oauth_token'] userprofile.oauth_secret = access_token['oauth_token_secret'] userprofile.save() # Authenticate the user and log them in using Django's pre-built # functions for these things. user = authenticate( username=identifier, password=access_token['oauth_token_secret'] ) login(request, user) return HttpResponseRedirect(reverse('home'))