我已经使用自定义表单身份验证设置了一个简单的ASP MVC项目。我也在使用Entity Framework,所以我目前有一个名为Account的EF域名模型和一个名为AccountViewModel的视图模型。在对用户进行身份验证时,我之前在我的帐户/身份验证操作中执行此操作,该操作将从登录表单的帐户/登录位置发布。
但是,我知道在控制器中使用业务逻辑并不是一个好主意,因此我觉得我应该将其转移到模型中。可以将这种逻辑移到我的视图模型中吗?以下是我的观点模型:
Public Class AccountViewModel
Public Property Email As String
Public Property Password As String
Public Function Authenticate() As Boolean
Using context As New DbContext
Dim emailMatch = (From acc In context.Accounts
Where acc.Email = Me.Email).FirstOrDefault
If Not emailMatch Is Nothing Then
If emailMatch.FailedLogins < 5 Then
If Me.Password = emailMatch.Password Then
emailMatch.FailedLogins = 0
context.SaveChanges()
Return True
Else
emailMatch.FailedLogins += 1
context.SaveChanges()
End If
End If
End If
End Using
Return False
End Function
End Class
然后我处理在我的控制器中设置身份验证cookie,以响应此函数的返回。
'POST: /Account/Auth
Function Auth(account As AccountViewModel) As ActionResult
If account.Authenticate Then FormsAuthentication.SetAuthCookie(account.Email, False)
Return RedirectToAction("Index")
End Function