diff --git a/gluon/contrib/redis_session.py b/gluon/contrib/redis_session.py index 14ce094c..ce8fb167 100644 --- a/gluon/contrib/redis_session.py +++ b/gluon/contrib/redis_session.py @@ -143,7 +143,6 @@ class MockTable(object): release_lock(self.r_server, key_lock, newid) return newid - class MockQuery(object): """a fake Query object that supports querying by id and listing all keys. No other operation is supported diff --git a/gluon/globals.py b/gluon/globals.py index bb10b89a..39117a22 100644 --- a/gluon/globals.py +++ b/gluon/globals.py @@ -498,7 +498,6 @@ class Session(Storage): masterapp=None, clear_session=False ): - if request is None: request = current.request if response is None: @@ -576,13 +575,14 @@ class Session(Storage): if record_id == '0': raise Exception('record_id == 0') # Select from database - row = db(table.id == record_id).select().first() + row = db(table.id == record_id).select() + row = row and row[0] or None # Make sure the session data exists in the database if not row or row.unique_key != unique_key: raise Exception('No record') unique_key = web2py_uuid() - row.update_record(unique_key=unique_key) + db(table.id == record_id).update(unique_key=unique_key) response.session_id = '%s:%s' % (record_id, unique_key) response.session_db_table = table response.session_db_record_id = record_id diff --git a/gluon/tools.py b/gluon/tools.py index 3c27a0be..eb6d6e50 100644 --- a/gluon/tools.py +++ b/gluon/tools.py @@ -1794,7 +1794,7 @@ class Auth(object): guess = keys.get('email', 'anonymous').split('@')[0] keys['first_name'] = keys.get('username', guess) user_id = table_user.insert(**table_user._filter_fields(keys)) - user = table_user[user_id] + user = table_user[user_id] print user if self.settings.create_user_groups: group_id = self.add_group( @@ -1856,11 +1856,14 @@ class Auth(object): delattr(user,'password') else: user = Row(user) - for key,value in user.items(): + for key, value in user.items(): if callable(value) or key=='password': delattr(user,key) + sessdb = current.response.session_db_table and current.response.session_db_table._db or None current.session.renew( - clear_session=not self.settings.keep_session_onlogin, db=self.db) + clear_session=not self.settings.keep_session_onlogin, + db=sessdb + ) current.session.auth = Storage( user = user, last_visit=current.request.now, @@ -2247,8 +2250,10 @@ class Auth(object): current.session.auth = None current.session.flash = self.messages.logged_out + sessdb = current.response.session_db_table and current.response.session_db_table._db or None current.session.renew( - clear_session=not self.settings.keep_session_onlogout, db=self.db) + clear_session=not self.settings.keep_session_onlogout, + db=sessdb) if not next is None: redirect(next) @@ -4913,7 +4918,7 @@ class Expose(object): def __init__(self, base=None, basename=None, extensions=None, allow_download=True): """ Usage: - + def static(): return dict(files=Expose()) @@ -4995,7 +5000,7 @@ class Expose(object): return '' def xml(self): - return DIV( + return DIV( H2(self.breadcrumbs(self.basename)), self.paragraph or '', self.table_folders(), @@ -5154,7 +5159,7 @@ class Wiki(object): db.wiki_tag.insert(name=tag, wiki_page=page.id) db.wiki_page._after_insert.append(update_tags_insert) db.wiki_page._after_update.append(update_tags_update) - + if (auth.user and check_credentials(current.request, gae_login=False) and not 'wiki_editor' in auth.user_groups.values()):