IIS 部署 Django 时,为什么 os.getlogin() 获取的是应用池身份?

iis 部署 django 时,为什么 os.getlogin() 获取的是应用池身份?

iis 部署 django 网站时,os.getlogin() 获取应用池身份的原因

iis 上部署 django 网站时,应用池的身份会影响 os.getlogin() 的结果。当使用 windows 验证时,iis 会将请求分发到某个应用池中,并使用该应用池的凭据运行 django 代码。因此,os.getlogin() 返回的将是应用池的身份,而不是当前登录用户的身份。

解决方法

有两种方法可以解决此问题:

1. 使用 impersonate 模块

impersonate 模块允许 django 以请求用户的身份运行代码。在 settings.py 中添加以下代码:

middleware = [
    ...
    'impersonate.middleware.impersonatemiddleware',
    ...
]

在视图中,使用以下代码获取当前用户的登录名:

from django.contrib.auth.impersonate import impersonate
from django.contrib.auth import get_user_model

user_model = get_user_model()

with impersonate(user_model.objects.get(username=request.user)):
    # 代码可以访问当前用户的凭据
    user_login = os.getlogin()

2. 修改 iis 设置

iis 中,将网站的应用程序池身份设置为 "特定用户",并指定网站应运行的 windows 用户帐户。但是,这种方法需要在服务器上创建和管理用户帐户,因此可能不太方便。

问题已解决。

以上就是IIS 部署 Django 时,为什么 os.getlogin() 获取的是应用池身份?的详细内容,更多请关注其它相关文章!