在使用 Flask、Flask-Login 和 Flask-Session 时,我遇到了以下问题:
当单击外部站点(跨域)上的链接时,该链接指向受保护的路由@login_required
,flask-logins _load_user
-function 无法检索用户信息(因为跨域请求未发送 cookie) . (不使用装饰器,current_user.is_authenticated
似乎是False
。)
(来自flask_login.login_manager.py
)
if user is None:
config = current_app.config
cookie_name = config.get('REMEMBER_COOKIE_NAME', COOKIE_NAME)
header_name = config.get('AUTH_HEADER_NAME', AUTH_HEADER_NAME)
has_cookie = (cookie_name in request.cookies and
session.get('_remember') != 'clear')
if has_cookie:
cookie = request.cookies[cookie_name]
user = self._load_user_from_remember_cookie(cookie)
elif self._request_callback:
user = self._load_user_from_request(request)
elif header_name in request.headers:
header = request.headers[header_name]
user = self._load_user_from_header(header)
如果使用了装饰器,请求将被重定向到/?next=/protectedView
. 如果只是使用current_user.is_authenticated
,就会有结果False
。
每次单击刷新时,会话 cookie 都会重新创建和覆盖。但是,如果我在 URL 栏中单击并按 Enter,则用户加载器能够访问 remember_cookie 并加载用户数据,而无需创建新会话。
当从另一个域中输入受保护的路由时,是否有任何简单方便的方法允许加载用户数据?
更新:我发现设置REMEMBER_COOKIE_SECURE
为None
而不是Strict
会导致烧瓶登录登录用户。该链接现在重定向到正确的页面。