Fix login so user is sent to their target page after authentication.

This commit is contained in:
Lance Edgar 2015-03-05 16:19:38 -06:00
parent 2762e8e072
commit d296b5bde5

View file

@ -2,7 +2,7 @@
################################################################################
#
# Rattail -- Retail Software Framework
# Copyright © 2010-2014 Lance Edgar
# Copyright © 2010-2015 Lance Edgar
#
# This file is part of Rattail.
#
@ -49,11 +49,12 @@ def forbidden(request):
This is triggered whenever access is not allowed for an otherwise
appropriate view.
"""
msg = literal("You do not have permission to do that.")
if not authenticated_userid(request):
msg += literal("  (Perhaps you should %s?)" %
tags.link_to("log in", request.route_url('login')))
# Store current URL in session, for smarter redirect after login.
request.session['next_url'] = request.current_route_url()
request.session.flash(msg, allow_duplicate=False)
url = request.referer
@ -73,7 +74,6 @@ def login(request):
"""
The login view, responsible for displaying and handling the login form.
"""
referrer = request.get_referrer()
# Redirect if already logged in.
@ -89,6 +89,8 @@ def login(request):
request.session.flash("{0} logged in at {1}".format(
user, localtime(request.rattail_config).strftime('%I:%M %p')))
headers = remember(request, user.uuid)
# Treat URL from session as referrer, if available.
referrer = request.session.pop('next_url', referrer)
return HTTPFound(location=referrer, headers=headers)
request.session.flash("Invalid username or password")