2013-02-12 138 views
-1

我正在嘗試做登錄部分,但它沒有驗證數據庫的用戶名和密碼。 任何人都可以告訴我這段代碼有什麼問題嗎?用戶名和密碼的數據庫驗證不起作用。

服務/ User.cfc

<cffunction name="login" access="public" output="false" returntype="any"> 
       <cfargument name="username" required="true"> 
       <cfargument name="password" required="true"> 
        <cfquery name="getUser"> 
          SELECT users.Id, 
            users.username, 
            users.password  
          FROM Users 
          Where UserName = <cfqueryparam value="#arguments.username#" cfsqltype="CF_SQL_VARCHAR"> 
          AND Password = <cfqueryparam value="#arguments.password#" cfsqltype="CF_SQL_VARCHAR"> 
        </cfquery> 
        <cfif getUser.recordcount gt 0> 
         <cfreturn getUser> 
        </cfif> 
     </cffunction> 

控制器/ login.cfc

<cffunction name="login" access="public" returntype="void"> 
          <cfargument name="rc" type="struct" required="true"> 
          <cfset user = getUserService().login(arguments.rc.Username,arguments.rc.password)> 
           <cfif arguments.rc.username EQ UserName and arguments.rc.password EQ password> 
            <cfset session.auth = structNew()> 
            <cfset session.auth.isLoggedin = "yes"/> 
            <!--- <cfset session.auth.id = users.id /> ---> 
            <cfset session.auth.username = UserName /> 
            <cfset session.auth.password = password /> 
           <cfelse> 
            <cfset rc.message = createMessage('error','','entered password is wrong')> 
            <cfset variables.fw.redirect('login.default','message')> 
           </cfif> 

      </cffunction> 

感謝。

回答

3

查看調用login()的結果,您沒有限定用戶名和密碼的範圍。嘗試user.UserName和user.password的:

<cfif arguments.rc.username EQ user.UserName and arguments.rc.password EQ user.password> 

您還需要檢查從登錄響應()是查詢所有。目前如果用戶名/密碼不匹配,login()不會返回任何內容。您可以在結果上使用IsQuery()或更改login()以始終返回結果集,並只檢查代碼中的長度。如果用戶名和密碼不匹配,您也可能會發出異常。然後,您可以嘗試login()調用,並在控制器的login()方法中捕獲並處理失敗。

您可能會考慮將服務中的登錄方法重命名爲validateUserCredentials或類似的東西,因爲真正的登錄(設置會話狀態)發生在您的控制器中,儘管這只是個人喜好的問題。

雖然不是問題的一部分(也可能是你的代碼的其他地方處理),你應該看看hashing and salting your passwords爲了barnyr保護用戶

+0

感謝。我犯了錯誤,我沒有範圍的用戶名和密碼。 感謝您提供鏈接哈希和醃製密碼,這是我的下一步。 – 2013-02-12 09:17:47