首页 > 解决方案 > 在 Web2py 中,用户登录后如何重定向到另一个页面?

问题描述

默认情况下,成功登录后,页面会指向“默认/索引”。我希望它重定向到其他页面。

这是我的控制器代码“user.py”

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

这是“用户/登录”的视图代码

<!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>

问题是,当表单被处理时,它仍然重定向到“默认/索引”页面。我不知道在哪里可以更改系统中的这个默认设置。我的控制器的代码无法正常工作。

标签: web2py

解决方案


auth.login()操作自己处理登录后重定向,因此在控制器代码中的下一行开始运行之前,重定向已经发生。

如此处所述,在您有Auth设置的地方,您可以添加:

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

请注意,该设置只是默认的登录后重定向 URL(即,如果用户直接转到登录 URL)。但是,如果用户从另一个页面被重定向到登录页面或通过默认链接到达登录页面auth.navbar(),则 URL 将包含一个_next引用回原始页面的参数,auth.login()因此将重定向回引用页面(即,auth.login()首先检查_nextURL 中的参数,并且仅auth.settings.login_next在没有_next参数时使用)。如果您想覆盖此行为,并且page_1无论用户如何进入登录页面,始终强制重定向到,您可以将next参数传递给auth.login()

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

以上内容优先,并将覆盖_nextURL 中的任何参数以及auth.settings.login_next.


推荐阅读