Cómo pasar un valor de auth_callback a oauth / request_token con Twython

Twitter recientemente hizo lo siguiente obligatorio:

1) Debe pasar un valor oauth_callback a oauth / request_token. No es opcional. Incluso si ya tiene uno configurado en dev.twitter.com. Si está haciendo fuera de banda OAuth, pase oauth_callback=oob .

2) Debe pasar el oauth_verifier o oauth_verifier que recibió de su callback ejecutada o que recibió su mano escrita por su usuario final a oauth / access_token. Aquí está el hilo de Twitter ( https://dev.twitter.com/discussions/16443 )

Esto ha provocado que Twython get_authorized_tokens emita este error:

 Request: oauth/access_token Error: Required oauth_verifier parameter not provided 

Tengo dos preguntas:

1. ¿Cómo se pasa el valor de oauth_callback a oauth / request_token con Twython?

2. ¿Cómo se pasa a través del oauth_verifier del oauth_verifier ?

Puedo obtener el oauth_verifier con request.GET [‘oauth_verifier’] de la url de callback, pero no tengo idea de qué hacer desde allí con Twython. He buscado por todas partes pero no he encontrado ninguna respuesta, así que decidí publicar esto. Este es mi primer post así que por favor sea amable;)

Aquí está mi código:

 def register_twitter(request): # Instantiate Twython with the first leg of our trip. twitter = Twython( twitter_token = settings.TWITTER_KEY, twitter_secret = settings.TWITTER_SECRET, callback_url = request.build_absolute_uri(reverse('account.views.twitter_thanks')) ) # Request an authorization url to send the user to auth_props = twitter.get_authentication_tokens() # Then send them over there request.session['request_token'] = auth_props return HttpResponseRedirect(auth_props['auth_url']) def twitter_thanks(request, redirect_url=settings.LOGIN_REDIRECT_URL): # Now that we've got the magic tokens back from Twitter, we need to exchange # for permanent ones and store them... twitter = Twython( twitter_token = settings.TWITTER_KEY, twitter_secret = settings.TWITTER_SECRET, oauth_token = request.session['request_token']['oauth_token'], oauth_token_secret = request.session['request_token']['oauth_token_secret'], ) # Retrieve the tokens authorized_tokens = twitter.get_authorized_tokens() # Check if twitter user has a UserProfile try: profile = UserProfile.objects.get(twitter_username=authorized_tokens['screen_name']) except ObjectDoesNotExist: profile = None 

Resolví mi propia respuesta. Aquí está la solución si puede ayudar a alguien más:

En el archivo Twython.py, agregué un nuevo parámetro oauth_verifier al constructor de la clase Twython. Obtengo el valor oauth_verifier de callback_url en mi vista twitter_thanks.

En get_authorized_tokens esta línea de código:

 response = self.client.get(self.access_token_url) 

y agregó el siguiente código:

 callback_url = self.callback_url or 'oob' request_args = urllib.urlencode({'oauth_callback': callback_url, 'oauth_verifier':self.oauth_verifier }) response = self.client.post(self.access_token_url, params=request_args) 

Ahora funciona como un encanto y es compatible con OAuth 1.0A.