Para ello, he localizado django-social-auth[6], que integra en el sistema de autenticación de Django diversos mecanismos de login social entre los que se incluye OAuth2. La configuración de django-social-auth con OAuth2 es relativamente sencilla, simplemente tenemos que añadir el siguiente fragmento a nuestro settings.py[7]:
-> INSTALLED_APPS = (
-> # ...
-> 'social_auth',
-> )
->
-> AUTHENTICATION_BACKENDS = (
-> 'social_auth.backends.google.GoogleOAuth2Backend',
-> )
->
-> GOOGLE_OAUTH_EXTRA_SCOPE = [
-> 'https://www.googleapis.com/auth/userinfo.email[8]',
-> 'https://www.googleapis.com/auth/userinfo.profile[9]',
-> 'https://www.google.com/reader/api/[10]',
-> ]
->
-> LOGIN_URL = '/login/google-oauth2'
-> LOGIN_REDIRECT_URL = '/logged-in/'
-> LOGIN_ERROR_URL = '/login-error/'
->
-> GOOGLE_OAUTH2_CLIENT_ID = 'xxxx'
-> GOOGLE_OAUTH2_CLIENT_SECRET = 'xxxx'
+```
+INSTALLED_APPS = (
+ # ...
+ 'social_auth',
+)
+
+AUTHENTICATION_BACKENDS = (
+ 'social_auth.backends.google.GoogleOAuth2Backend',
+)
+
+GOOGLE_OAUTH_EXTRA_SCOPE = [
+ 'https://www.googleapis.com/auth/userinfo.email[8]',
+ 'https://www.googleapis.com/auth/userinfo.profile[9]',
+ 'https://www.google.com/reader/api/[10]',
+]
+
+LOGIN_URL = '/login/google-oauth2'
+LOGIN_REDIRECT_URL = '/logged-in/'
+LOGIN_ERROR_URL = '/login-error/'
+
+GOOGLE_OAUTH2_CLIENT_ID = 'xxxx'
+GOOGLE_OAUTH2_CLIENT_SECRET = 'xxxx'
+```
+
, donde los dos últimos parámetros los podemos obtener de la Google API Console[11] (donde también deberemos añadir las URLs de nuestra aplicación para validar el proceso de login)
Con esto, con anotar una vista como @login_required, al visitarla se nos redirigirá a la página de autenticación de las cuentas Google donde haremos login y se nos redirigirá de nuevo a la vista ya autenticados (se creará un usuario de Django correspondiente al usuario de Google y se vinculará a la sesión del usuario).
Finalmente, para "propagar" esta autenticación a libgreader, el mecanismo que he encontrado es extraer el token de acceso que recoge django-social-auth y almacena en una base de datos y pasárselo a libgreader, algo que he encapsulado en un módulo[12], pero que en realidad es bastante sencillo:
-> usa = UserSocialAuth.objects.get(user=user)
-> auth = OAuth2Method(settings.GOOGLE_OAUTH2_CLIENT_ID, settings.GOOGLE_OAUTH2_CLIENT_SECRET)
-> auth.authFromAccessToken(usa.extra_data['access_token'])
-> reader = GoogleReader(auth)
+```
+usa = UserSocialAuth.objects.get(user=user)
+auth = OAuth2Method(settings.GOOGLE_OAUTH2_CLIENT_ID, settings.GOOGLE_OAUTH2_CLIENT_SECRET)
+auth.authFromAccessToken(usa.extra_data['access_token'])
+reader = GoogleReader(auth)
+```
+
, donde user es el usuario (que desde una vista podemos obtener por ejemplo haciendo request.user). Una vez tenemos esto, ya obtenemos el objeto GoogleReader que constituye el punto de acceso a la API.
El resto de código implementado por el momento tan sólo obtiene la reading-list (los elementos sin leer) y muestra sus 20 primeras entradas.
-
=> http://blog.feedly.com/2013/03/14/google-reader/ 1: http://blog.feedly.com/2013/03/14/google-reader/
=> https://code.google.com/p/greader-unofficial/ 2: https://code.google.com/p/greader-unofficial/
=> https://github.com/askedrelic/libgreader 3: https://github.com/askedrelic/libgreader
# Debian GNU/Windows
2015-04-11
+ACTUALIZACIÓN 2022-09-10: Obviamente ahora existe WSL, que es algo parecido a esto, pero no es lo mismo... Últimamente pienso que lo que molaría es coger una distro Linux, compilarla a WASM, y modificarla para que se pueda ejecutar como proceso de usuario sin privilegios.
+
Aunque muchas veces digo que soy usuario de Linux (desde 2002 en casa, 2011 en el trabajo), la verdad es que lo que soy es usuario de Debian (también uso CentOS en algunos servidores).
Debian aspira a ser el sistema operativo universal- su versión "testing" contiene la friolera de 58.000 paquetes de software, que incluyen un entorno tipo UNIX y el kernel de Linux, todo en un formato fácilmente instalable. Cantidad no equivalente siempre a calidad, pero al menos para mi, Debian cubre prácticamente todas mis necesidades informáticas con un coste mínimo en tiempo y dinero: en un momento tengo acceso a la mayoría del software que necesito en un entorno eficiente y agradable.
Hasta ahora, obtener los beneficios de Windows y Debian suponía mantener dos sistemas. Yo personalmente tengo máquinas virtuales Windows que utilizo para acceder a software que sólo está disponible en Windows- como Microsoft Office, pero en general evito en la medida de lo posible usar Windows porque es un tostón trabajar dentro de una máquina virtual y por tanto aprovecho poco todo el software disponible para Windows.
-Ahora bien, Microsoft está cambiando y comienza a contemplar Linux como algo diferente a un enemigo a destruir. Curiosamente, Microsoft parece escoger Debian cuando comienza a acercarse a Linux (sin ir más lejos, han sacado un contenedor Docker para ejecutar aplicaciones de ASP.NET que es Debian Wheezy[1]).
+Ahora bien, Microsoft está cambiando y comienza a contemplar Linux como algo diferente a un enemigo a destruir. Curiosamente, Microsoft parece escoger Debian cuando comienza a acercarse a Linux (sin ir más lejos, han sacado un contenedor Docker para ejecutar aplicaciones de ASP.NET que es Debian Wheezy [actualización 2022-09-10: estrictamente ahora las imágenes de Docker de dotnet tienen de base Debian Bullseye, pero también Alpine, Ubuntu y CBL-Mariner, que es la distro Linux de Microsoft, pero basada en RPM]).
Por otra parte, Debian está preparada para correr bajo otros sistemas operativos. Sin ir más lejos Debian GNU/kFreeBSD es Debian corriendo sobre FreeBSD. También anda por ahí un intento de ejecutar Debian sobre Hurd, el kernel de GNU que quizá algún día sea relevante.
...
Postdata: soy plenamente consciente que OS X sería una alternativa a Windows en un escenario así. Sin embargo, debo decir que prefiero Windows. Apple y su entorno comienza a disgustarme más de lo que me disgustaba Microsoft. Y desde luego, creo que Apple sería infinitamente menos cooperativa.
-
-
-=> https://github.com/aspnet/aspnet-docker/blob/master/nightly/Dockerfile 1: https://github.com/aspnet/aspnet-docker/blob/master/nightly/Dockerfile
\ No newline at end of file