采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
token.py的get_token函数中 最后,
`t = {'token': token.decode('ascii')}`
对于bytes类型的字符串, 什么时候decode('utf8')什么时候decode('ascii')? 这里能用decode('utf8')代替decode('ascii')吗?
def
generate_auth_token(uid,ac_type,scope
=
None
,expiration
7200
):
'''
:param uid: 用户id
:param ac_type:active_type,客户端类型
:param scope: 作用域
:param expiration: 有效时间
:return: token
s
Serializer(current_app.config[
'SECRET_KEY'
],
expires_in
expiration)
return
s.dumps({
'uid'
:uid,
'type'
:ac_type.value,
}).decode(
'utf-8'
)
如上述代码,在生成token都方法里,直接return decode('utf-8')后都token,运行成功,目前没发现问题
@api
.route('
',methods=['
POST'])
get_token():
form
ClientForm().validate_for_api()
promise
{
ClientTypeEnum.USER_EMAIL:User.verify
}
identity
promise[form.
type
.data](
form.account.data,
form.secret.data
# identity为用户uid,开始生成token
expiration
current_app.config[
'TOKEN_EXPIRATION'
]
token
generate_auth_token(identity[
form.
.data,
,
t
'token'
:token
Success(msg
t)
postman收到都返回也是正确的
"error_code"
:
0
"msg"
: {
"token"
"eyJhbGciOiJIUzI1NiIsImlhdCI6MTUzMjY3MTk0NiwiZXhwIjoxNTMyNzU4MzQ2fQ.eyJ1aWQiOjE0LCJ0eXBlIjoxMDB9.t4Q_-ju8LclM3yBVfu5Yb_0_ejqw4ZJZiWGjz7GqfiI"
},
"request"
"POST /v1/token"
上一期的高级编程中,有一节课,发送电子邮件重置密码的
当时使用都是decode('utf-8')'
generate_token(
self
, expiration
600
], expiration)
'id'
.
id
验证token时也是encode('utf-8)
@
staticmethod
reset_password(token, new_password):
])
try
data
s.loads(token.encode(
))
except
False
user
User.query.get(data.get(
if
is
user.password
new_password
db.session.commit()
True
A`为什么现在需要使用decode('ascii')?
B`是什么原因导致两种情况下都不同用法,我们如何选择?
你这是不一样的呀,因为你在调用jwt生成的函数时,别人给你的就是ascii编码呀。别人给你的是什么,你就要用什么
这里我觉得你太纠结了吧,这个编码人家是怎么编码的你就要用什么呀。
utf-8会报错
上一期课程还是utf8,这次是ascii,所以,对于bytes类型的字符串, 什么时候decode('utf8')什么时候decode('ascii')?
上一期课程是指什么?
flask 高级编程,当时在发送邮件找回密码时,也用到了Serializer进行加密,s = Serializer(current_app.config['SECRET_KEY'], expiration) 然后s.dumps({'id':self.id}).decode('utf-8')来return
登录后可查看更多问答,登录/注册
RESTFul+权限管理+token令牌+扩展flask=提升编程思维
1.1k 9
1.8k 9
1.0k 9
927 8
1.0k 7
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号