[FIX] auth_openid: use set_cookie_and_redirect + handle errors correctly

bzr revid: chs@openerp.com-20120814104052-tw5zgqu5nb12zj5c
This commit is contained in:
Christophe Simonis 2012-08-14 12:40:52 +02:00
parent 6a33cfa71a
commit b1e5c9e1ae
2 changed files with 12 additions and 16 deletions

View File

@ -28,6 +28,7 @@ import werkzeug.urls
import werkzeug.exceptions
from openerp.modules.registry import RegistryManager
from openerp.addons.web.controllers.main import login_and_redirect, set_cookie_and_redirect
try:
import openerp.addons.web.common.http as openerpweb
except ImportError:
@ -159,7 +160,7 @@ class OpenIDController(openerpweb.Controller):
def process(self, req, **kw):
session = getattr(req.session, 'openid_session', None)
if not session:
return werkzeug.utils.redirect('/')
return set_cookie_and_redirect(req, '/')
oidconsumer = consumer.Consumer(session, self._store, consumer_class=GoogleAppsAwareConsumer)
@ -168,7 +169,6 @@ class OpenIDController(openerpweb.Controller):
display_identifier = info.getDisplayIdentifier()
session['status'] = info.status
user_id = None
if info.status == consumer.SUCCESS:
dbname = session['dbname']
@ -206,10 +206,9 @@ class OpenIDController(openerpweb.Controller):
# TODO fill empty fields with the ones from sreg/ax
cr.commit()
req.session.authenticate(dbname, login, key, {})
return login_and_redirect(req, dbname, login, key)
if not user_id:
session['message'] = 'This OpenID identifier is not associated to any active users'
session['message'] = 'This OpenID identifier is not associated to any active users'
elif info.status == consumer.SETUP_NEEDED:
session['message'] = info.setup_url
@ -223,8 +222,7 @@ class OpenIDController(openerpweb.Controller):
# information in a log.
session['message'] = 'Verification failed.'
fragment = '#loginerror' if not user_id else ''
return werkzeug.utils.redirect('/' + fragment)
return set_cookie_and_redirect(req, '/#action=login&loginerror=1')
@openerpweb.jsonrequest
def status(self, req):

View File

@ -8,7 +8,7 @@ instance.web.Login = instance.web.Login.extend({
this._super.apply(this, arguments);
var self = this;
this._default_error_message = this.$element.find('.login_error_message').text();
this._default_error_message = this.$element.find('.oe_login_error_message').text();
this.$openid_selected_button = $();
this.$openid_selected_input = $();
@ -40,8 +40,7 @@ instance.web.Login = instance.web.Login.extend({
}
});
this._check_fragment();
this._check_error();
},
@ -67,11 +66,9 @@ instance.web.Login = instance.web.Login.extend({
},
_check_fragment: function() {
_check_error: function() {
var self = this;
var fragment = jQuery.deparam.fragment();
console.log(fragment);
if (fragment.loginerror !== undefined) {
if (this.params.loginerror !== undefined) {
this.rpc('/auth_openid/login/status', {}, function(result) {
if (_.contains(['success', 'failure'], result.status) && result.message) {
self.do_warn('Invalid OpenID Login', result.message);
@ -132,11 +129,12 @@ instance.web.Login = instance.web.Login.extend({
do_warn: function(title, msg) {
//console.warn(title, msg);
this.$element.find('.login_error_message').text(msg).show();
this.$element.find('.oe_login_error_message').text(msg).show();
this._super(title, msg);
},
reset_error_message: function() {
this.$element.find('.login_error_message').text(this._default_error_message);
this.$element.find('.oe_login_error_message').text(this._default_error_message);
}
});