def callback(req): token = req.session.get('token', None) if not token: return render('callback.html', { 'token': True }) token = oauth.OAuthToken.from_string(token) if token.key != req.GET.get('oauth_token', 'no-token'): return render('callback.html', { 'mismatch': True }) token = get_authorized_token(token) obj = is_authorized(token) if obj is None: return render('callback.html', { 'username': True }) user = None try: user = User.objects.get(username=obj['screen_name']) except: user = User(username=obj['screen_name']) user.save() profile = None try: profile = user.get_profile() except: profile = UserProfile(user=user) profile.oauth_token = token.key profile.oauth_token_secret = token.secret profile.followers = obj['followers_count'] profile.image = obj['profile_image_url'] try: profile.location = obj['location'] except: pass try: profile.lang = obj['lang'] except: pass try: profile.time_zone = obj['time_zone'] except: pass profile.save() from django.contrib.auth import login, load_backend if not hasattr(user, 'backend'): for backend in settings.AUTHENTICATION_BACKENDS: if user == load_backend(backend).get_user(user.pk): user.backend = backend break if hasattr(user, 'backend'): login(req, user) del req.session['token'] return redirect('/info/')
def oauth_authenticated(request): print 'dropbox.views.oauth_authenticated' # Step 1. Use the request token in the session to build a new client. # Step 2. Request the authorized access token from Provider. sess = request.session['dropbox_session'] access_token = sess.obtain_access_token(request.session['dropbox_request_token']) print access_token pprint.pprint(access_token) print "Access Token:" print " - oauth_token = %s" % access_token.key print " - oauth_token_secret = %s" % access_token.secret print dropbox_client = client.DropboxClient(sess) profile = dropbox_client.account_info() print profile try: user = User.objects.get(username = profile['uid']) except User.DoesNotExist: print 'Info: dropbox.views.oauth_authenticated - User DoesNotExist, creating one' user = User.objects.create_user(profile['uid'], profile['email'], 'password') # this is dangerous user.first_name = profile['display_name'] user.last_name = "" user.save() # Save our permanent token and secret for later. print 'dropbox.views.authenticate - creating user profile' userprofile = UserProfile() userprofile.user = user userprofile.oauth_token = access_token.key userprofile.oauth_secret = access_token.secret userprofile.access_token = access_token userprofile.save() # Authenticate the user and log them in using Django's pre-built # functions for these things. user = authenticate(username = profile['uid'], password = '******') if user is not None: login(request, user) print 'dropbox.views.authenticate - user logged in' request.session['dropbox_client'] = dropbox_client else: print 'Error: dropbox.views.oauth_authenticate - user not authenticated' return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL)