我想使用标题(编码的会话对象)将用户从我的flask应用程序重定向到客户端应用程序,该标题可被浏览器存储为cookie,以供进一步的请求使用。
我正在使用其他服务器对用户进行身份验证,并且在成功登录后,他将被重定向到我的flask应用程序,在该应用程序中,我在数据库和会话对象中设置了该用户。而且,在此之后,我需要将请求重定向到我的客户端应用程序。因此,我使用flask.redirect将用户重定向到我的客户端应用程序。现在,为了让浏览器存储用户信息,我想将会话对象作为cookie发送到浏览器。
TLDR; 这就是我想要做的:
身份验证位于单独的服务器上,但是内容服务器和客户端都需要通过cookie来跟踪会话。我无法做的部分是让客户端(localhost:3000)跟踪会话。
以下是我尝试的方法:
resp = flask.make_response()
resp.set_cookie('Set-Cookie', 'this is the session cookie I want the browser to set for further requests')
return flask.redirect('http://localhost:3000/', Response=resp)
这给了我错误:
File "/home/shaily/.virtualenvs/venv/lib/python3.6/site-packages/werkzeug/utils.py", line 507, in redirect
mimetype="text/html",
TypeError: __call__() got an unexpected keyword argument 'mimetype'
是否有其他解决方法或解决方法?
答案 0 :(得分:0)
“重定向功能”可以通过以下方式进行重构。
resp = redirect("http://localhost:5001")
resp.set_cookie('a', 'x')
return resp
在对this问题的评论中,我们无法传递“响应”对象进行重定向。响应必须是另一个 Class (在写为here时适用于werkzeug.Response的包装类)。
答案 1 :(得分:0)
根据烧瓶中如何实现会话,在http请求的生命周期内对会话对象进行任何更改时,编码的会话对象将作为cookie发送到该请求的http响应中。因此,我不再需要显式发送它。
我无法使用with open("Batting.csv", "rb") as Batting:
csv_batting = csv.reader(Batting)
csv_batting.next()
def combine():
df = panda.read_csv("Batting.csv", index_col=0)
combo = df.groupby('playerID')
combo.sum().reset_index().replace(r'\\n', '').to_csv('Combo.csv', column s=('playerID', 'AB', 'H'), index=False)
combine()
with open("Combo.csv") as csv_combo:
def average():
for row in csv_combo:
try:
a = float(row[2])
b = float(row[1])
return (a / b)
except ZeroDivisionError:
return 0
with open("Bat.csv", "w") as Bat:
csv_avg = csv.writer(Bat)
for row in csv_combo:
average()
avg = average()
player = row[0]
csv_avg.writerow([player, avg])
来读取客户端应用程序中的cookie,因为默认情况下,会话cookie是httpOnly,即出于安全原因,它们无法通过javascript应用程序访问。 httpOnly所要做的就是让您的浏览器存储cookie,以向服务器发送进一步的http请求。如果由于某种原因,您仍然想读取JavaScript中的会话cookie,则无法在服务器配置中将SESSION_COOKIE_HTTPONLY设置为False。
要发送带有http响应的cookie,此解决方案对我来说效果很好:In Flask, set a cookie and then re-direct user