在烧瓶中设置Cookie重定向到外部URL

时间:2019-07-06 05:45:22

标签: session authentication redirect flask cookies

我想使用标题(编码的会话对象)将用户从我的flask应用程序重定向到客户端应用程序,该标题可被浏览器存储为cookie,以供进一步的请求使用。

我正在使用其他服务器对用户进行身份验证,并且在成功登录后,他将被重定向到我的flask应用程序,在该应用程序中,我在数据库和会话对象中设置了该用户。而且,在此之后,我需要将请求重定向到我的客户端应用程序。因此,我使用flask.redirect将用户重定向到我的客户端应用程序。现在,为了让浏览器存储用户信息,我想将会话对象作为cookie发送到浏览器。

TLDR; 这就是我想要做的:

  1. 客户端到达内容服务器。
  2. 客户端没有活动的会话,已通过回调到内容服务器的方式重定向到身份验证服务器。
  3. 内容服务器创建会话,并使用会话cookie重定向回客户端。
  4. 客户端到达内容服务器。
  5. 内容服务器验证会话cookie并允许访问客户端。

身份验证位于单独的服务器上,但是内容服务器和客户端都需要通过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'

是否有其他解决方法或解决方法?

2 个答案:

答案 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