本站资源收集于互联网,不提供软件存储服务,每天免费更新优质的软件以及学习资源!

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

网络教程 app 1℃

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 impersonatefrom django.contrib.auth import get_user_modeluser_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() 获取的是应用池身份?的详细内容,更多请关注范的资源库其它相关文章!

转载请注明:范的资源库 » IIS部署Django时_为什么os.getlogin()获取的是应用池身份?

喜欢 (0)