2011-06-27 84 views
2

所以我能夠使我的recaptcha事情工作,但我的問題是,但我想只有在3次嘗試後纔出現。我擁有的一個選項是將用戶重定向到一個將已經擁有驗證碼的視圖(重複登錄,但帶有驗證碼),然後讓他通過該頁面登錄。有沒有其他的選擇?我覺得部分視圖會導致頁面後的問題。你認爲什麼是生成驗證碼的最佳方式?mvc在失敗的登錄嘗試後生成captcha

<% using(Html.BeginForm()) {%> 
     <%: Html.AntiForgeryToken() %> 
     <%: Html.ValidationSummary() %> 
     <label>Username:</label> 
     <%: Html.TextBoxFor(m => m.Username) %> 
     <br /><br /> 
     <label>Password:</label> 
     <%: Html.PasswordFor(m => m.Password) %> 
     <br /><br /> 
     <input type="submit" value="Login" /> 
     <%: Html.ActionLink("Register", "Register", "") %> 
     <%: Html.ActionLink("Forgot Password", "Password", "") %> 
     <%: Html.ActionLink("Forgot Username", "Username", "") %> 


     <%: ReCaptcha.GetHtml(publicKey: "thisismykey", theme: "red") %> 


    <% } %> 

謝謝, ģ

回答

3

您傳遞一個模型(希望一個ViewModel)。爲什麼不加NumberOfFailedLogins呢?

然後你可以只放一點的Recaptcha周圍代碼說

<%: if (Model.NumberofFailedLogins > 3) { %> 
<%: ReCaptcha.GetHtml(publicKey: "thisismykey", theme: "red") %> 
<% } %> 

注:我用剃刀語法,所以如果道歉以上是不完美的。我相信你明白了!

顯然你需要在幕後更新NumberOfFailedLogins

編輯:只是爲了澄清,失敗的登錄嘗試的次數應該被記錄在自動幕後的會員數據庫(嘗試登錄會做的行爲;注意,ASP.NET Membership Provider自動記錄的數連續失敗的登錄嘗試),並從那裏ViewModel獲取此信息。因此,如果您使用機器人嘗試強行進入,則無關緊要,但仍可以在嘗試三次後使用ReCaptcha進行呈現(如果需要,當然也可以鎖定)。

+0

有趣的是,即時通訊存儲在一個cookie中的實際嘗試。讓我快速嘗試一下。 – gdubs

+0

請記住,它是不是一個好主意,保持在你的餅乾,除非他們被加密...在任何其他方式試圖破解/強制你的系統的機器可以僞造cookie信息並將其發送給你... –

+0

所以你建議只使用整個模型的東西?我能夠讓它工作順便說一句,謝謝你的想法! – gdubs