Publicidad

miƩrcoles, 25 de mayo de 2016

Redireccionar Odoo a la Pagina Web Principal de una Base de Datos sin DB Filter

RedirecciĆ³n de una Pagina Web sin enviar a los Visitantes al Login o a la SelecciĆ³n de  la Base de Datos



    Un problema que Ćŗltimamente eh notado en Odoo, es al momento de activar los Portales Web y tener MĆŗltiples Bases de Datos, normalmente envĆ­a a los visitantes a la selecciĆ³n de la Base de Datos y cuando redireccionamos el trafico de un dominio a nuestro servidor Web, este siempre es enviado directamente al login y no a la pagina Web, bueno esto puede resolverse de muchas formas, utilizando subdominios, reverse proxy con nginx y muchas mas, a mi parecer todas eran un poco complejas y necesitaban muchos pasos, me di a la tarea de pensar un poco y modificar el mĆ©todo principal de re direccionamiento de odoo, el cual se encuentra en:

path_addons_odoo/web/controller/main.py

Podemos modificar este archivo con vim, vi, nano, gedit, sublime text, brackets o cualquier editor, simplemente debemos ir al metodo llamado def_login_redirect().

Debemos comentar el metodo quedando de la siguiente forma:


#def login_redirect():
#    url = '/web/login?'
#    # built the redirect url, keeping all the query parameters of the url
#    redirect_url = '%s?%s' % (request.httprequest.base_url, werkzeug.urls.url_encode(request.params))
#    return """<html><head><script>
#        window.location = '%sredirect=' + encodeURIComponent("%s" + location.hash);
#    </script></head></html>
#    """ % (url, redirect_url)

Modificamos el mƩtodo quedando de la siguiente manera:

def login_redirect():
    return """<html><head><script>
        window.location = '%sredirect=' + encodeURIComponent("%s" + location.hash);
    </script></head></html>
    """ % ('/?db=Mi_Base_de_Datos', '')

Notemos  que al final solo debemos enviar la Base a la que  se enviara a los visitantes, esta tambiĆ©n debera contener nuestra pagina Web.

Si vamos a redireccionar el trafico de un dominio externo hacia nuestro servidor Odoo, este debe ser redireccionado de la siguiente manera:

http://odoo.poncesoft.net:8069/?db=Mi_Base_de_Datos&web

El valor Mi_Base_de_Datos corresponde a la misma base a la que redireccionamos el mƩtodo login_redirect()


Nota: Cada uno de los valores para el redireccionamiento de nuestra aplicaciĆ³n, dependerĆ” de la instalaciĆ³n de nuestro Servidor Odoo y si utilizamos un servidor Web como Nginx, Apache, etc. o la ejecuciĆ³n nativa de Odoo.

7 comentarios:

  1. lo recomendable seria no modificar el codigo fuente directamente, sino hacerle la extension en la cual se le defina el nuevo comportamiento.

    ResponderBorrar
    Respuestas
    1. Claro, pero dependerĆ” de cada persona algunos no tienen tantos conocimientos de programaciĆ³n y les sera mas facil esta forma, gracias por tu comentario Jose +1

      Borrar
  2. buenas tardes, gracias por el aporte, he seguido tus indicaciones pero aun no me funciona ya he apuntado mi dominio a mi maquina local que tiene instalado odoo y varias bases de datos, una de ellas tiene el sitio web y en mi instalacion he modificado el archivo que se encuentra en:

    /opt/odoo/odoo-server/addons/web/controlles/main.py

    no se si haga falta hacer algo mas de antemano gracias por tu ayuda

    ResponderBorrar
  3. En mi caso, y siguiendo el razonamiento de German, hago que la base a la que redirecciona toda vez que cierro sesion es la ultima a la que accedi (lo cual es muy util en ambiente multibases):
    def login_redirect():
    return """<...><...><...>
    window.location = '%s';

    """ % ('/web/login?db=' + request.session.db)

    ResponderBorrar
  4. Hola, interesante la soluciĆ³n. Estuve revisando en el archivo y no encontre ningun metodo con el nombre de login_redirect. En Odoo 9 la ubicacion/nombre es diferente?. Gracias!

    ResponderBorrar
  5. muchas gracias por tu post y tu ayuda de compartir info en odo13 funciona

    def _login_redirect(self, uid, redirect=None):
    return redirect if redirect else '/web'
    los cambie por tu codigo que compartiste y funciona

    ResponderBorrar
    Respuestas
    1. Gracias por tu ayuda, habia dejado un poquito el tema pero en ocasiones nos salva la vida. un abrazo

      Borrar