小编Tom*_*ock的帖子

将用户的权限存储在JWT声明中或在每次请求时在服务器上检查它是否更有效?

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)

security optimization authorization http jwt

9
推荐指数
2
解决办法
2853
查看次数

Python - 不要使用父日志记录处理程序

我有用四个处理程序定义的根记录器;

  • 文件处理程序错误
  • 文件处理程序信息
  • 文件处理程序调试
  • 流处理器信息

现在我有一个模块,它通过侦听队列从多进程收集日志。我希望这个模块只记录到 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 时,它仅显示 …

python logging python-3.x

3
推荐指数
1
解决办法
2403
查看次数