
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() 获取的是应用池身份?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1350940.html
微信扫一扫
支付宝扫一扫