如何在Python网络请求中获取auth_user

0 投票
2 回答
1357 浏览
提问于 2025-04-16 00:25

我刚接触Python,想在我的网页项目中做一个基本的身份验证。请问有没有办法像在PHP中用'$_SERVER['php_auth_user']'那样获取HTTP认证的变量?我现在使用的是Firefox的Tornado服务器。

2 个回答

0

tornado-http-auth模块为Tornado框架提供了基本的身份验证和摘要身份验证功能。简单来说,这个模块可以帮助你在使用Tornado时,确保只有经过验证的用户才能访问你的应用。下面是一个简单的使用示例:

import tornado.ioloop
from tornado_http_auth import BasicAuthMixin
from tornado.web import RequestHandler, Application

class MainHandler(BasicAuthMixin, RequestHandler):
    def prepare(self):
        self.get_authenticated_user(realm='Protected', auth_func=credentials.get)

    def get(self):
        self.write('Hello %s' % self._current_user)

app = Application([
    (r'/', MainHandler),
])

app.listen(8080)
tornado.ioloop.IOLoop.current().start()
1

在Tornado中似乎没有特别支持基本认证(Basic auth),所以你需要自己动手,通过对Authorization头进行Base64解码来实现。

大概可以这样做:

import base64

class BasicAuthHandler(tornado.web.RequestHandler):
    def get_current_user(self):
        scheme, _, token= self.request.headers.get('Authorization', '').partition(' ')
        if scheme.lower()=='basic':
            user, _, pwd= base64.decodestring(token).partition(':')
            # if pwd matches user:
                return user
        return None

    def get(self):
        if not self.get_current_user():
            self.set_status(401)
            self.set_header('WWW-Authenticate', 'basic realm="Example site"')
            # produce error/login page for user to see if they press escape to
            # cancel authorisation
            return

(这个代码没有测试,因为我没有运行Tornado。)

撰写回答