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
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.
lo recomendable seria no modificar el codigo fuente directamente, sino hacerle la extension en la cual se le defina el nuevo comportamiento.
ResponderBorrarClaro, 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
Borrarbuenas 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:
ResponderBorrar/opt/odoo/odoo-server/addons/web/controlles/main.py
no se si haga falta hacer algo mas de antemano gracias por tu ayuda
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):
ResponderBorrardef login_redirect():
return """<...><...><...>
window.location = '%s';
""" % ('/web/login?db=' + request.session.db)
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!
ResponderBorrarmuchas gracias por tu post y tu ayuda de compartir info en odo13 funciona
ResponderBorrardef _login_redirect(self, uid, redirect=None):
return redirect if redirect else '/web'
los cambie por tu codigo que compartiste y funciona
Gracias por tu ayuda, habia dejado un poquito el tema pero en ocasiones nos salva la vida. un abrazo
Borrar