2013-09-19 5 views
2

Я пытаюсь перенаправить пользователя на другую страницу (по умолчанию/новости) после входа в систему (по умолчанию/индекс), но независимо от того, насколько сильно я пытался, я не смог это сделать. Я использую логин, доступный на навигационной панели.Web2Py Redirect после входа в систему

Я добавил эту строку в db.py

auth.settings.login_next=URL(r=request, c='default', f='news') 

Все в контроллер по умолчанию тот же она включает в себя

def news(): 
    message = "Welcome to News!" 
    return locals() 

Я также попытался с этим

auth.settings.login_next=URL('news') 

Это тоже не работает. Пожалуйста помоги.

Edit: После поиска в течение нескольких дней я нашел ответ here Это, как вы это делаете.

#In layout.html change 
<ul id="navbar" class="nav pull-right">{{='auth' in globals() and auth.navbar(mode="dropdown") or ''}}</ul> 
# to 
<ul id="navbar" class="nav pull-right">{{='auth' in globals() and auth.navbar(mode="dropdown",referrer_actions=None) or ''}}</ul> 

И снова изменения в db.py

#In db.py add these lines: 
auth.settings.login_next = URL('news') 

что работал для меня.

ответ

2

URL-адрес auth.settings.login_next имеет значение по умолчанию только в том случае, если в URL-адресе входа нет реферера (реферрер находится в строковой переменной «_next»). Навигатор автоматически включает в себя ссылку в ссылках на URL-адрес действующей страницы (для URL-адреса текущей страницы). Чтобы переопределить это, вы можете явно указать аргумент referrer_actions и исключить действия, для которых не нужно устанавливать реферер:

{{=auth.navbar(..., referrer_actions=['register', ...])}} 
+0

Спасибо вам Энтони, я попытался использовать это прямо в макете. html и index.html, все еще не удалось добиться успеха [этот поток] (http://permalink.gmane.org/gmane.comp.python.web2py/101346), где Роб обратился к этой проблеме, очень помог мне. –

+0

Ваше правление говорит, что оно работает с 'referrer_actions = None'.Вы говорите, что это не работает, если 'referrer_actions' - это список, который * не включает * login '? Он должен работать в любом случае. – Anthony

+0

Да, это не сработало для меня, я изменил '{{= auth.navbar (..., referrer_actions = ['news'])}}' в layout.html и не включает в себя "login" , –

0

Это сейчас апрель 2016 года, и хотя исходный вопрос по-прежнему имеет большое значение, похоже, что web2py изменился, и предложенные выше варианты layout.html больше не актуальны. В стандартном layout.html нет ссылки на «auth.navbar».

Хорошей новостью является то, что все, что нужно сделать, это включить код python, описанный выше в контроллере default.py, и он работает. Заметьте, я положил его в функцию «user», я не уверен, что это лучшее место, чтобы поместить его в качестве большинства комментариев, просто скажем, чтобы поместить его в «контроллер», не указав функцию.

def user(): 
    auth.settings.login_next = URL('default','dashboard') 
    return dict(form=auth()) 
0

Я был в состоянии перенаправить на домашнюю страницу пользователя после входа/регистрации, поставив на странице информации о продукте следующий код.

Таким образом, когда они перенаправляются обратно на страницу приветственного продукта, я проверяю, пришли ли они из входа или регистрации и направляют их туда, куда они должны идти.

Я хотел бы найти способ использовать auth.settings.login_next

#

данные четкости():

# If just signed up or just logged in, go to the user's home page and not 
# back to this product landing page that referred them 
if auth.is_logged_in(): 

    if '/default/user/login?_next=/fnd/home/info' in request.env.http_referer: 
     redirect(URL('user', 'show_campaigns')) 

    if '/default/user/register?_next=/fnd/home/info' in request.env.http_referer: 
     redirect(URL('user', 'show_campaigns')) 


return dict() 
Смежные вопросы