В Web2py, как перенаправить на другую страницу после входа пользователя в систему? - PullRequest
0 голосов
/ 11 июля 2020

По умолчанию после успешного входа на страницу открывается «default / index». Я хочу, чтобы он перенаправлялся на другую страницу.

Это мой код контроллера «user.py»

def login():
    form=auth.login()
    if form.process().accepted:
        redirect(URL('page_1'))
    return dict(form=form)

Это код просмотра для «user / login»

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div class="container">
        
        <div class="form-container">
     {{=form.custom.begin}}


            <input type="text" name="email" placeholder="email id" class="string" id="auth_user_email" value="" />

        <input placeholder="Password" name="password" class="password" id="auth_user_password" type="password" class="field" value="" />
            <div class="wrap">
                <input name="submit" type="submit" class="btn" value="{{=T('Login')}}" />
                <input name="sign_up" class="btn" type="submit" formaction='/{{=request.application}}/default/user/register' value="{{=T('Sign Up')}}"/>
            </div>
            <input name="Forgot Password" type="submit" class="btn" value="{{=T('Forgot Password')}}" formaction='/{{=request.application}}/default/user/retrieve_password' />
            {{=form.custom.end}}
        </div>
    </div>
    
</body>
</html>

Дело в том, что когда форма обрабатывается, она все еще перенаправляет на страницу «default / index». Я не знаю, где изменить эту настройку по умолчанию в системе. Код моего контроллера не работает должным образом.

1 Ответ

0 голосов
/ 11 июля 2020

Действие auth.login() само обрабатывает перенаправление после входа в систему, поэтому перенаправление уже произойдет до того, как будет запущена следующая строка в коде вашего контроллера.

Как описано здесь, где у вас есть настройки Auth, вы можете добавить:

auth.settings.login_next = URL('default', 'page_1')

Обратите внимание, что этот параметр является только URL-адресом перенаправления после входа в систему по умолчанию (т. е. если пользователь переходит непосредственно на URL-адрес входа). Однако, если пользователь перенаправлен на страницу входа с другой страницы или переходит на страницу входа через ссылки auth.navbar() по умолчанию, URL-адрес будет включать параметр _next, ссылающийся на исходную страницу, и поэтому auth.login() будет перенаправить обратно на ссылающуюся страницу (т. е. auth.login() сначала проверяет наличие параметра _next в URL-адресе и использует auth.settings.login_next, только если нет параметра _next). Если вы хотите переопределить это поведение и всегда принудительно перенаправлять на page_1 независимо от того, как пользователь попал на страницу входа, вы можете передать аргумент next в auth.login():

auth.login(next=URL('default', 'page_1'))

Вышеупомянутое имеет приоритет и переопределит любой параметр _next в URL-адресе, а также auth.settings.login_next.

...