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

View File

@ -8,7 +8,7 @@ instance.web.Login = instance.web.Login.extend({
this._super.apply(this, arguments); this._super.apply(this, arguments);
var self = this; 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_button = $();
this.$openid_selected_input = $(); 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 self = this;
var fragment = jQuery.deparam.fragment(); if (this.params.loginerror !== undefined) {
console.log(fragment);
if (fragment.loginerror !== undefined) {
this.rpc('/auth_openid/login/status', {}, function(result) { this.rpc('/auth_openid/login/status', {}, function(result) {
if (_.contains(['success', 'failure'], result.status) && result.message) { if (_.contains(['success', 'failure'], result.status) && result.message) {
self.do_warn('Invalid OpenID Login', 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) { do_warn: function(title, msg) {
//console.warn(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() { 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);
} }
}); });