JWT是一种确保数据发送给用户并且不会被篡改的好方法,但这会带来一些艰难的选择.目前,我处于两难选择之中,即在授权数据中存储授权数据并仅为授权触摸数据库一次,或者只是存储用户ID并检查每个请求与数据库的服务器的授权级别.
使这个如此艰难的选择的原因是该应用程序使用多个授权级别,这使得base64编码的URL非常长且笨重(参见下面可以预期存储为授权级别的内容).
另一方面,要获得授权,必须在数据库中进行两次查找.
所以我的问题如下:通过向服务器发送权限,每个请求的额外开销是否值得避免在每次请求时查找权限的麻烦?
作为旁注; 在权限更改的情况下,查找数据库方法的好处是不需要用户再次登录(请参阅post).
"perms": {
"roles": [
{
"name": "Admin",
"id": 1,
"assigned": true
},
{
"name": "Webmaster",
"id": 8,
"assigned": true
}
],
"actions": [
{
"id": 1,
"name": "cms-edit",
"parameters": null,
"parameterized": null
},
{
"id": 9,
"name": "admin-syslog",
"parameters": null,
"parameterized": null
},
{
"id": 10,
"name": "admin-debug",
"parameters": null,
"parameterized": null
},
{
"id": 12,
"name": "member-list-extended",
"parameters": null,
"parameterized": null
},
{
"id": 2,
"name": "cms-list",
"parameters": null, …Run Code Online (Sandbox Code Playgroud) 我有用四个处理程序定义的根记录器;
现在我有一个模块,它通过侦听队列从多进程收集日志。我希望这个模块只记录到 FileHandlers。我尝试使用以下代码来实现这一点;
class ModuleLogger(Singleton):
def __init__(self):
# Create a queue to stash the messages
self.queue = Queue(-1)
# Start thread
thread = Thread(target=self.__receive)
thread.daemon = True
thread.start()
def __receive(self):
# Keep checking the queue for new logging messages
while 1:
try:
record = self.queue.get()
# Exit on None value
if record is None:
break
logger = logging.getLogger(record.name)
logger.setLevel(logging.DEBUG)
for handler in logging.getLogger().handlers:
if type(handler) != type(logging.StreamHandler()):
logger.addHandler(handler)
logger.handle(record)
except Exception:
...
...
Run Code Online (Sandbox Code Playgroud)
但是,消息仍然会记录到标准输出。不过,当我打印 logger.handlers 时,它仅显示 …