Перенаправление после входа в систему в web2py - PullRequest
4 голосов
/ 02 декабря 2011

У меня проблемы с управлением поведением перенаправления после входа в систему в web2py.

Согласно this , web2py обрабатывает перенаправление после входа в систему по-разному, в зависимости от того, был ли вход в систему инициирован системой (например, при доступе к функции, защищенной аутентификацией) или пользователем (при нажатии на ' войти 'ссылка). В первом случае поведение состоит в том, чтобы перенаправить на страницу-ссылку после входа в систему, как и следовало ожидать. Однако в последнем случае пользователь перенаправляется на страницу индекса после входа в систему или на страницу, жестко закодированную в auth.settings.login_next.

Как бы я настроить все так, чтобы перенаправление после входа в систему всегда возвращало вас на страницу перехода, независимо от того, как был инициирован вход в систему?

1 Ответ

5 голосов
/ 02 декабря 2011

Вы можете изменить ссылки «Логин», чтобы они всегда включали текущий URL в качестве значения переменной _next в строке запроса. Например, где бы вы ни создавали ссылку для входа, определите ее следующим образом:

A('Login', _href=URL('default', 'user', args='login',
    vars=dict(_next=URL(args=request.args, vars=request.vars))))

Это добавит URL текущей страницы (включая любые аргументы и переменные) к переменной _next в строке запроса ссылки для входа в систему, что приведет к перенаправлению на текущую страницу после входа в систему.

Если вы используете помощник auth.navbar() для создания своей ссылки для входа, уже есть изменение в транке, которое решает эту проблему (будет выпущено очень скоро). Новый auth.navbar() автоматически добавит переменную _next ко всем ссылкам, поэтому после нажатия любой ссылки на панели навигации пользователь перенаправляется обратно на исходную страницу. Тем временем вы можете отредактировать auth.navbar() следующим образом:

import urllib
navbar = auth.navbar()
if not auth.is_logged_in and request.args(0) != 'login':
    navbar[1]['_href'] += '?_next=' +\
        urllib.quote(URL(args=request.args, vars=request.vars))
...