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