基于structkeyexists的应用程序cfc onrequest启动开关会话远程用户或cgi远程用户不起作用

问题描述 投票:0回答:1

在我的application.cfc文件的“ OnRequestStart”方法中,我像这样设置session.remote用户:

   cfset session.remoteuser = "#right(cgi.REMOTE_USER,7)#" />

这对特定用户来说效果很好,现在我正试图创建一个管理员视图,管理员可以在其中输入特定用户ID并像他们一样查看该页面。我的管理视图页面中包含以下脚本:admin.cfm

  <form action="" method="post">
          <input type="text" name="viewasUser"><button type="submit" cname="viewas">View As</button>
     </form>

在我的application.cfc onrequeststart方法中,我添加了此逻辑来切换session.remoteuser,它不起作用:

 <cfif structkeyexists(form,"viewas")> 
        <cfset session.remoteuser = '#form.viewasuser#'>
    <cfelse>
        <cfset session.remoteuser = "#right(cgi.REMOTE_USER,7)#" /> 
    </cfif>

基于远程用户,它将在其余逻辑中切换视图,但是此if语句不起作用,并且不会更改会话。remoteuser,

我在做什么错?

coldfusion cfml application.cfc
1个回答
0
投票

这看起来很有趣。

<cfif structkeyexists(form,"viewas")> 
    <cfset session.remoteuser = '#form.viewasuser#'>
<cfelse>
    <cfset session.remoteuser = "#right(cgi.REMOTE_USER,7)#" /> 
</cfif>

我做了类似的事情,但是看起来有些不同

rc是url和表单合并在一起

//控制器代码函数模拟(rc){如果(IsUserInRole(“ admin” && rc.keyExists(“ id”){//确保id也很好loginService.doImpersonate(rc.id);}

//型号代码函数doImpersonate(必需的数字ID){

   var Account (EntityLoadByPK("Users", arguments.id));       

   // all kinds of error checking


   cflogout();
   cfloginuser(
      name = Account.getName(),
      password = hash(now),
      roles = Account.getRoles()
   );

}
© www.soinside.com 2019 - 2024. All rights reserved.