我有一个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
答案 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'))