Flask成功登录后如何重定向到上一页

时间:2017-02-16 20:54:31

标签: flask

我有一个webapp,我没有使用Flask-login。如果用户访问链接但未登录,我会将用户重定向到登录页面。我实现了我的设置'用户名'在会话中并检查当用户尝试直接访问某些链接而不登录时,即在这种情况下用户名将为空。

我试图遵循此 SO solution,但下一个参数始终为None。我已尝试过两种解决方案,但无法使用其中一种解决方案。

import shutil
import sys
import os

def rename():
        ### pseudo
        for folderName, subfolders, filenames in os.walk(path, topdown=##???):
            for subfolder in subfolders:
                print subfolder
                os.rename(os.path.join(folderName, subfolders), os.path.join(folderName, subfolders + 'rename'))

            print('')

    else:
        print("Directory does not exist")

if __name__ == '__main__':
    copy()

第二个解决方案

username = session.get('username')
if username:
    # go to home 
else:
    next_url = request.url
    login_url = '%s?next=%s' % (url_for('login'), next_url)
    return redirect(login_url)

print(request.url)= localhost:5000 / visitPage

登录功能

username = session.get('username')
if username:
    # go to home 
else:
    return redirect(url_for('login', next= request.url))

这里当我打印(下一个)时,它是无 但登录URL有下一个参数

  

http://localhost:5000/login?next=http%3A%2F%2Flocalhost%3A5000%2FvisitPage

2 个答案:

答案 0 :(得分:0)

可能有几个问题:

  • url_for会跳过查询参数,如果它具有无值
  • 您的登录端点需要POST个请求。在这种情况下,您必须以next
  • 方式获取request.form.get('next')参数

如果这些提示对您没有帮助,您可以在代码中添加import ipdb;ipdb.set_trace()(可能必须先安装ipdb)并尝试对其进行调试,以便更好地了解此处发生的情况或为理解你的问题提供更多背景信息。

答案 1 :(得分:0)

使用会话来跟踪上一个网址, 例如:

@app.route('/profile')
def profile():
    if user_not_logged_in:
        session['url'] = url_for('profile')
        return redirect(url_for('login'))
    return rendertemplate('profile.html')

@app.route('/login')
def login():
    if login == True: #assuming login was successful
         if 'url' in session:
            return redirect(session['url'])
         return redirect(url_for('anyother_url'))