You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让get_current_user()返回与$_SERVER['AUTH_USER']相同的用户?

如何让get_current_user()返回与$_SERVER['AUTH_USER']相同的用户?

首先得先搞清楚一个关键点:这两个函数本来就不是用来获取同一个用户的,之前它们返回相同值只是你的服务器环境刚好满足了某种巧合条件,现在环境变了,差异就显现出来了。

先给你拆解下两者的本质区别:

  • $_SERVER['AUTH_USER']:这个是当IIS启用Windows身份验证后,从HTTP请求里拿到的实际访问网站的远程Windows用户——也就是从另一台Windows机器访问你网站的那个用户,这才是你真正需要的登录用户。
  • get_current_user():这个函数返回的是运行PHP进程的系统账户,也就是IIS应用池对应的身份用户,或者是拥有PHP项目文件夹权限的本地服务器用户。之前它和AUTH_USER一致,大概率是因为你的IIS应用池开启了身份模拟,让PHP进程以访问用户的身份在运行;后来可能是应用池配置被修改、权限调整,或者服务器更新导致模拟设置失效了,所以它现在返回的是服务器本地的那个权限用户。

那如果一定要让get_current_user()返回远程访问用户,你需要调整IIS的配置,重新启用身份模拟:

  1. 打开IIS管理器,找到你的目标网站,进入「身份验证」设置,确保Windows身份验证已启用,并且匿名身份验证已禁用(不然会跳过用户验证)。
  2. 回到网站的主设置界面,打开「高级设置」,找到「启用身份模拟」选项,设置为「已启用」,然后选择「通过身份验证的用户」——这样PHP进程就会模拟当前访问网站的远程用户身份来运行。
  3. 最后要确认这个远程用户拥有足够的权限:比如能访问PHP项目文件夹、能执行PHP进程、能读写必要的文件资源,不然会出现权限报错。

不过这里要给你提个醒:其实更稳妥的方案还是继续用$_SERVER['AUTH_USER']来获取访问用户。因为get_current_user()的行为完全依赖于服务器进程的运行身份,很容易被配置变更、权限调整影响;而AUTH_USER是直接从HTTP身份验证流程里拿到的用户信息,稳定性和可靠性都更高,没必要强行去改get_current_user()的返回值。

备注:内容来源于stack exchange,提问作者pileup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 13:42:55