No es posible actualizar la sesión de YouTube token sin registro en la API de usuario de Cuentas de Google

StackOverflow https://stackoverflow.com/questions/2803996

Pregunta

Tengo problemas para actualizar mi token de sesión en el motor de aplicación de Google si mi usuario no está conectado en mi aplicación que utiliza la API de Google cuentas de usuario. Si el usuario está conectado en ese momento a continuación, funciona perfectamente.

Si no, entonces estoy recibiendo este error:

Traceback (most recent call last):
  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 511, in __call__
    handler.get(*groups)
  File "/base/data/home/apps/5th-anniversary/1.341853888797531127/main.py", line 78, in get
    u.upgradeToken(self)
  File "/base/data/home/apps/5th-anniversary/1.341853888797531127/upload.py", line 47, in upgradeToken
    client.UpgradeToSessionToken()
  File "/base/data/home/apps/5th-anniversary/1.341853888797531127/gdata/service.py", line 903, in UpgradeToSessionToken
    raise NonAuthSubToken
NonAuthSubToken 

¿Cuáles son mis mejores opciones aquí? No quiero que el usuario tenga que entrar en el Google API de Cuentas y luego el sitio de YouTube para subir un video.

aquí es mi método para actualizar el token:

def upgradeToken(data,self):
    get = self.request.GET
    authsub_token = get['token']

    gdata.alt.appengine.run_on_appengine(client)

    client.SetAuthSubToken(authsub_token)
    client.UpgradeToSessionToken()

cliente es simplemente client = gdata.youtube.service.YouTubeService()

bastante seguro de que me falta algo en el lado de autenticación pero parece que no puede ver lo que, gracias!

¿Fue útil?

Solución

Me resuelto mediante el uso de:

client.UpgradeToSessionToken(gdata.auth.extract_auth_sub_token_from_url(self.request.url))

pero esto planteó otro problema cuando se construye el formulario de carga con

GetFormUploadToken

recibo:

Traceback (most recent call last):
  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 513, in __call__
    handler.post(*groups)
  File "/base/data/home/apps/5th-anniversary/1.341859541699944556/upload.py", line 106, in post
    form = u.getUploadForm(self,title,description,keywords)
  File "/base/data/home/apps/5th-anniversary/1.341859541699944556/upload.py", line 65, in getUploadForm
    response = client.GetFormUploadToken(video_entry,'http://gdata.youtube.com/action/GetUploadToken')
  File "/base/data/home/apps/5th-anniversary/1.341859541699944556/gdata/youtube/service.py", line 716, in GetFormUploadToken
    raise YouTubeError(e.args[0])
YouTubeError: {'status': 401L, 'body': '<HTML>\n<HEAD>\n<TITLE>User authentication required.</TITLE>\n</HEAD>\n<BODY BGCOLOR="#FFFFFF" TEXT="#000000">\n<H1>User authentication required.</H1>\n<H2>Error 401</H2>\n</BODY>\n</HTML>\n', 'reason': ''}

Otros consejos

Prueba esto:

new_token = client.UpgradeToOAuthAccessToken(
    gdata.auth.extract_auth_sub_token_from_url(self.request.url)
client.SetOAuthToken(new_token)
client.GetFormUploadToken(my_video_entry)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top