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() 获取的是应用池身份?的详细内容,更多请关注其它相关文章!