2012-08-31 16 views
16

Tengo un problema aparentemente simple, pero no he encontrado una manera de depurarlo.Django: [correo electrónico protegido] en el administrador

En el administrador en nuestro sitio web de producción, al editar un objeto que tiene una ForeignKey para el usuario, todos los usuarios aparecen como [correo electrónico protegido]. Eso hace que el administrador inutilizable en estas áreas!

Intenté buscar en Google el problema, pero debido a que el término "correo electrónico protegido" aparece en muchas listas de correo en un contexto no relacionado, no puedo encontrar una solución. Además, busqué "correo electrónico protegido" en la base de código de Django pero no lo encontré.

Cualquier idea de qué hacer?

+0

¿miró los módulos django instalados para ver si también estaban allí? No me sorprendería si hubiera algún módulo de terceros que esté causando esto. –

+0

Acabo de comprobar la versión estable actual (1.4.1), tampoco puedo encontrar nada en la base de código. ¿Qué versión de Django se está ejecutando en su producción? –

+0

¿Cómo se ve la función de usuario __unicode__? ¿Devuelve la dirección de usuario de los usuarios? – Jingo

Respuesta

22

Realmente no sé la respuesta, pero cada vez que veo [correo electrónico protegido] apareciendo en Google, si navego hasta el enlace aparece el correo electrónico y si inspecciono el elemento que tiene cerca esta pieza de javascript:

/* <![CDATA[ */ 
(function(){try{var s,a,i,j,r,c,l=document.getElementById("__cf_email__");a=l.className;if(a){s='';r=parseInt(a.substr(0,2),16);for(j=2;a.length-j;j+=2){c=parseInt(a.substr(j,2),16)^r;s+=String.fromCharCode(c);}s=document.createTextNode(s);l.parentNode.replaceChild(s,l);}}catch(e){}})(); 
/* ]]> */ 

Esto puede ayudarlo más. (Inspeccione su elemento para ver si esto se aplica a usted también.)

Si también lo ve en su código, This y this pueden ayudarlo.

EDITAR: Parece que es causado por Cloudflare's email obfuscation.

+2

De hecho fue CloudFlare. –

+2

Hombre, he perdido una hora entera investigando esto. Gracias por confirmar mis sospechas. – Vlad

+1

Mismo problema aquí con CloudFlare. Acabo de visitar https://www.cloudflare.com/cloudflare-settings?z=YOURDOMAIN.com#page=security y desactivar la ofuscación del correo electrónico. –

1

La ofuscación del correo electrónico es algo bueno para el sitio público, y me gustaría deshabilitarlo para el administrador. Así que escribo este middleware para desactivar la ofuscación del correo electrónico en admin.

def _insert_email_off(html): 
    origin = html 
    try: 
     pos1 = html.index('>', html.index('<body')) + 1 
     html = html[:pos1] + '<!--email_off-->' + html[pos1:] 
     pos2 = html.index('</body>') 
     html = html[:pos2] +'<!--/email_off-->' + html[pos2:] 
    except ValueError: 
     return origin 
    return html 


class CloudflareEmailProtect(MiddlewareMixin): 

    def process_response(self, request, response): 
     if request.path.startswith('/admin/'): 
      response.content = smart_bytes(_insert_email_off(smart_text(response.content))) 
     return response 


class TestCloudflareEmailProtect: 

    def test_admin(self, rf): 
     request = rf.get('/admin/aaa') 
     html = '<html><body>content</body>' 
     response = CloudflareEmailProtect().process_response(request, HttpResponse(html)) 
     assert b'<!--email_off--' in response.content 

    def test_not_admin(self, rf): 
     request = rf.get('/public') 
     html = '<html><body>content</body>' 
     response = CloudflareEmailProtect().process_response(request, HttpResponse(html)) 
     assert b'<!--email_off--' not in response.content 


def test_insert_email_off(): 
    html = 'aa <body zzz>bb cc</body>dd' 
    result = _insert_email_off(html) 
    assert result == 'aa <body zzz><!--email_off-->bb cc<!--/email_off--></body>dd' 

    assert _insert_email_off('aaa') == 'aaa' 
+0

puede desactivarlo a través de las Reglas de página en el panel de Cloudflare. – if237912print

Cuestiones relacionadas