当Redis的密码包含`/`

发布在 编程

今天在把Azure Redis Cache集成到Django项目的时候发现一个奇怪的报错,ValueError at /login/ invalid literal for int() with base 10: 'iAITMl7lD127c'

检查一下我的settings.py是这么写的:

1
2
3
4
5
6
7
8
9
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "rediss://:iAITMl7lD127c/VZEl0OZl8qviaXHIoKekaJjP1J1HI=@#马赛克#:6380/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}

然后发现报错信息中的iAITMl7lD127c正好就是/前面的内容,料想应该是解析URL的时候错把这个/当做分隔符了。一路TraceBack发现正是Python的标准库urlparse中抛出的错误,然后义正言辞地去找redis-py,结果发现人家已经修复了,但是django-redis应该不会对此进行修改,因为作者是知道这个BUG的但是也没改,而是给了之前的OPTIONS的解决方案。我目前的解决方案是,刷一个不带/的密码或者这样用:

1
2
3
4
5
6
7
8
9
10
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "rediss://#马赛克#:6380/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"PASSWORD": "iAITMl7lD127c/VZEl0OZl8qviaXHIoKekaJjP1J1HI=",
}
}
}

参考阅读:

https://github.com/niwinz/django-redis/issues/114
https://github.com/andymccurdy/redis-py/issues/579

注释和共享

  • 第 1 页 共 1 页
作者的图片

唐梓涯

Pythoner, Emacser, GNU/Linuxer
目前在微软技术支持掏粪


全栈工程师


中国无锡