Flask JWT GraphQL-设置访问/刷新cookie
set\u access\u cookies/set\u refresh\u cookies不保存cookies并引发错误: 文件“/usr/local/lib/python3.8/site packages/werkzeug/_compat.py”,第202行,在to_字节中引发类型错误(“预期字节”) GraphQL错误:Flask JWT GraphQL-设置访问/刷新cookie,flask,graphql,jwt,Flask,Graphql,Jwt,set\u access\u cookies/set\u refresh\u cookies不保存cookies并引发错误: 文件“/usr/local/lib/python3.8/site packages/werkzeug/_compat.py”,第202行,在to_字节中引发类型错误(“预期字节”) GraphQL错误: { "errors": [ { "message": "Expected
{
"errors": [
{
"message": "Expected bytes",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"auth"
]
}
],
"data": {
"auth": null
}
}
配置:
app.config['JWT_TOKEN_LOCATION'] = ['cookies']
app.config['JWT_COOKIE_CSRF_PROTECT'] = False
app.config['JWT_ACCESS_TOKEN_EXPIRES'] = datetime.timedelta(seconds=1800)
app.config['JWT_COOKIE_SECURE'] = False
app.config['JWT_REFRESH_TOKEN_EXPIRES'] = datetime.timedelta(days=15)
app.config['JWT_COOKIE_CSRF_PROTECT'] = True
app.config['JWT_ACCESS_CSRF_HEADER_NAME'] = "X-CSRF-TOKEN-ACCESS"
app.config['JWT_REFRESH_CSRF_HEADER_NAME'] = "X-CSRF-TOKEN-REFRESH"
auth_.py:
class AuthMutation(graphene.Mutation):
access_token = graphene.String()
refresh_token = graphene.String()
resp = graphene.String()
class Arguments:
email = graphene.String(required=True)
password = graphene.String(required=True)
def mutate(self, info, password, email):
user = User.query.filter_by(email=email).first()
payload = user.uuid
if user and user.check_password(password):
access_token = create_access_token(identity=payload),
refresh_token = create_refresh_token(identity=payload)
resp = jsonify({'Login': True})
set_access_cookies(resp, access_token)
set_refresh_cookies(resp, refresh_token)
return AuthMutation(
access_token=access_token,
refresh_token=refresh_token,
resp=resp
)
else:
raise Exception('Authenication Failure : User is not registered')
我认为在将其发送到
set\u access\u cookies
和set\u refresh\u cookies
之前,您需要对access\u token
和进行编码。试试看
set_access_cookies(resp, access_token.encode('utf-8'))
set_refresh_cookies(resp, refresh_token.encode('utf-8'))
假设您正在使用python3(从错误跟踪中),access\u令牌和refresh\u令牌将是unicode字符串,但是这些函数需要字节字符串
Ref:我认为在将其发送到设置访问cookies
和设置刷新cookies
之前,您需要对访问令牌
和刷新令牌
进行编码。试试看
set_access_cookies(resp, access_token.encode('utf-8'))
set_refresh_cookies(resp, refresh_token.encode('utf-8'))
假设您正在使用python3(从错误跟踪中),access\u令牌和refresh\u令牌将是unicode字符串,但是这些函数需要字节字符串
参考: