Login 是否使用结构向登录信息添加变量?

Login 是否使用结构向登录信息添加变量?,login,coldfusion,passwords,Login,Coldfusion,Passwords,我正在尝试使用一个结构来安排三组登录和密码。理想情况下,我希望form.password和form.username检查结构userOne到userThree的变量,而不仅仅是检查密码和用户名的一个实例 有人能告诉我实现这一目标所需了解/了解的方向吗 先谢谢你 <cfset userOne = structNew()> <cfset userOne.name = "cat"> <cfset userOne.password = "meow"> <cfse

我正在尝试使用一个结构来安排三组登录和密码。理想情况下,我希望form.password和form.username检查结构userOne到userThree的变量,而不仅仅是检查密码和用户名的一个实例

有人能告诉我实现这一目标所需了解/了解的方向吗

先谢谢你

<cfset userOne = structNew()>
<cfset userOne.name = "cat">
<cfset userOne.password = "meow">
<cfset userOne.group = "1">

<cfset userTwo = structNew()>
<cfset userTwo.name = "bird">
<cfset userTwo.password = "chirp">
<cfset userTwo.group = "2">

<cfset userThree = structNew()>
<cfset userThree.name = "mouse">
<cfset userThree.password = "squeak">
<cfset userThree.group = "3">

 <cfset this_password = "squeak">
   <cfif form.password neq "squeak" or form.username neq "mouse">
    <cflocation url="login.cfm?status=le">
         <cfelse>
       <cflock scope="session" timeout="10">
         <cfset session.valid_user = "yes">
       </cflock>
    <cflocation url="index.cfm" addtoken="no">
 </cfif>



这会起作用,但有点乱。我希望这只是你的问题的一个例子,而不是它是如何工作的。

如果你可以将你的3个用户结构嵌套在一个用户结构中,按名称键入,那么你可以执行
structKeyExists()
来查找匹配的用户,然后只需检查密码。堆比逐个在多个结构上循环更快

例如


用户={
cat={name:“cat”,密码:“meow”,组:1},
bird={name:“bird”,密码:“chirp”,组:2},
鼠标={名称:“鼠标”,密码:“吱吱”,组:3}
};
如果(
structKeyExists(形式为“用户名”)
&&structKeyExists(形式为“密码”)
&&len(form.username和form.password)>0
&&structKeyExists(用户,form.username)
&&structKeyExists(用户[表单.用户名],“密码”)
&&用户[form.username].password==form.password
) {
//签入
}
否则{
//抛出错误“无效的用户名或密码”
}

这里有另一种处理方法:

<cfscript>
users = [{
    username = "cat",
    password = "meow"
},{
    username = "bird",
    password = "chirp"
},{
    username = "mouse",
    password = "squeak"
}];

for (user in users) {
    if (user.username == form.username && user.password == form.password) {
        // handle success log in
        // redirect
    }
}

// handle invalid log in
// redirect
</cfscript>

用户=[{
username=“cat”,
password=“喵喵”
},{
username=“bird”,
password=“chirp”
},{
用户名=“鼠标”,
password=“squeak”
}];
for(用户中的用户){
if(user.username==form.username&&user.password==form.password){
//处理成功登录
//重定向
}
}
//处理无效的登录
//重定向

感谢您的意见。你所说的工作原理是什么意思?我最终希望将一个用户限制为服务器上的一个文件夹,而其他两个用户可以访问整个站点,但首先希望建立三个用户及其登录名。我的意思是,在代码中定义用户很麻烦。此外,在执行if语句时,如果先是真的情况,然后是假的情况,通常可读性更高一些。但你的逻辑是正确的。我希望我的帖子能对你有所帮助。
<cfscript>
users = {
    cat = { name: "cat", password: "meow", group: 1 },
    bird = { name: "bird", password: "chirp", group: 2 },
    mouse = { name: "mouse", password: "squeak", group: 3 }
};

if (
    structKeyExists( form, 'username' )
    && structKeyExists( form, 'password' )
    && len( form.username & form.password ) > 0
    && structKeyExists( users, form.username )
    && structKeyExists( users[form.username], 'password' )
    && users[form.username].password == form.password
) {
    // sign them in
}
else {
    // throw error "invalid username or password"
}
</cfscript>
<cfscript>
users = [{
    username = "cat",
    password = "meow"
},{
    username = "bird",
    password = "chirp"
},{
    username = "mouse",
    password = "squeak"
}];

for (user in users) {
    if (user.username == form.username && user.password == form.password) {
        // handle success log in
        // redirect
    }
}

// handle invalid log in
// redirect
</cfscript>