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