2013-01-18 53 views
1

我正在使用我公司以前在使用框架的網站上使用的非常舊的登錄系統。 之前,當有人嘗試錯誤的用戶/合格組合時,該框架將加載一個簡單的cfinclude文件,其中包含登錄表單和錯誤消息。 現在,我在彈出窗口中使用了一個調用application.cfc的表單,但不是在彈出窗口中將錯誤消息重新加載到頁面,而是將cfinclude文件從應用程序組件加載到新頁面。在ColdFusion中登錄系統9

所以我需要爲這個應用程序發生一些事情。首先,我需要初始彈出窗口保持不變,如果user/pass的組合錯誤,則不應提交頁面,最後我需要將錯誤消息顯示在彈出窗口的某處。

如果有人做過這樣的事情,我會非常感謝您的反饋。

這是部分的我的代碼:

登錄表單:

<!--- loginErrMsg display - to tell why login is denied ---> 
<cfif isdefined("loginErrMsg")><span style="color:red">#loginErrMsg#</span><br /></cfif> 

<form name="LoginForm" id="LoginForm" action="<cfif test is false>https://secure.example.com</cfif>#loginFormAction#" method="post" target="_top"> 
</cfoutput> 
<input type="hidden" name="loginPost" value="true"> 
    <p> 
     Login below to take advantage of the great services we offer: 
    </p> 

    E-mail:<input name="j_username" class="loginform" type="text" size="30" maxlength="50" id="j_username"> 
    Password: <input name="j_password" type="password" size="30" maxlength="16" class="loginform"> 
    <br /> 

    <input type="submit" name="btn" value="Submit" class="bluebuttonnormal"> 
    </form> 

的Application.cfc代碼:

<cflogin applicationtoken="swmadmin"> 
     <cfif NOT IsDefined("cflogin")> 
      <cfinclude template="login.cfm"> 
      <cfabort> 
     <cfelse> 
      <cfquery name="userlookup" datasource="#ds#"> 
      SELECT clientadminID, roles, isFaxOnly, acctEnabled FROM clientadmin 
      WHERE 
      username=<cfqueryparam value="#cflogin.name#" CFSQLTYPE="CF_SQL_VARCHAR" maxlength="50"> 
      and password=<cfqueryparam value="#cflogin.password#" CFSQLTYPE="CF_SQL_VARCHAR" maxlength="16"> 
      </cfquery> 
      <cfif userlookup.recordcount eq 0> 
       <cfset loginErrMsg = "Invalid login."> 
       <cfinclude template="login.cfm"> 
       <cfabort> 

    </cflogin> 

回答

5

我有一個很老的登錄系統的工作是我的公司在使用框架的網站上使用 之前。

如果這是一個新網站,請不要使用它。登錄表格是一毛錢,可以在你的睡眠中完成。開始新鮮,做對吧。

所以我需要爲這個應用程序發生一些事情。首先,我需要 初始彈出窗口熬夜,如果 用戶/密碼的組合錯誤,最後我需要將錯誤 消息顯示在彈出窗口的某處,否則不應提交頁面。

您將要在這裏使用AJAX解決方案,可以自己編寫或使用像jQuery這樣的好庫。一旦您檢查了登錄值,您可以使用jQuery或簡單的JavaScript來取消隱藏或更新一個空元素的innerHTML以顯示錯誤消息。

<cflogin ...> 
... 
</cflogin> 

CFLogin讓我難過。另一個ColdFusion的標籤意味着簡化通常所做的事情,但這並沒有太大的幫助,並犧牲了靈活性。沒有它,你可以更好地控制你的應用程序。而不是CFLogin,嘗試這樣的僞代碼的東西,然後

<cfcomponent> 
    <cffunction name = "onRequest" ...> 
    <cfargument name="targetPage" type="String" required = "true" /> 
    <cfif !structKeyExists(session, "roles") and !findNoCase("loginHandler.cfm",cgi.script_name)> 
     <!--- notice I prevent the redirect on the form handler, otherwise the ajax will get redirected to the login.cfm page ---> 
     <cfinclude template = "login.cfm"> 
    <cfelse> 
     <cfinclude template = "#arguments.targetPage#"> 
    </cfif> 
    </cffunction> 
</cfcomponent> 

你login.cfm會包含您的形式,但您的按鈕將火像jQuery.post()爲「loginHandler.cfm」,再根據登錄的結果,如果登錄成功,您的回叫功能可能使用jQuery.html()顯示錯誤或window.location.replace/window.location.href。當然,如果登錄成功,您的ColdFusion頁面必須創建其會話變量,並在將結果發送回AJAX調用之前執行其他任何您想要的操作。

+0

非常感謝您投入這篇文章的時間和精力。我明天會明白並更新我的帖子。 – Geo