VB ASP .NET MVC自定义成员资格提供程序

时间:2012-08-28 13:06:55

标签: asp.net-mvc vb.net asp.net-mvc-3 asp.net-membership

我发现的所有示例都在C#中,如果是VB,我需要一个。如何将下面的代码转换为继承所有成员资格提供程序函数?

Imports System.Data.Entity
Imports MyBlog

Namespace MyBlog

    Public Class EmployeeController
        Inherits System.Web.Mvc.Controller

        Private db As EmployeeDbContext = New EmployeeDbContext

        '
        ' GET: /Employee/LogOn

        Public Function LogOn() As ActionResult
            Return View()
        End Function

    End Class

End Namespace

以下是我阅读的文章Custom membership or notImplementing custom login for ASP.NET MVC。我似乎无法在VB中继承多个类(不经常使用继承或实现或接口)。

2 个答案:

答案 0 :(得分:4)

您需要编写一个继承自MembershipProvider的类并覆盖您感兴趣的方法:

Public Class MyCustomMembershipProvider
    Inherits System.Web.Security.MembershipProvider

    Public Overrides Property ApplicationName As String
        Get

        End Get
        Set(value As String)

        End Set
    End Property

    Public Overrides Function ChangePassword(username As String, oldPassword As String, newPassword As String) As Boolean

    End Function

    Public Overrides Function ChangePasswordQuestionAndAnswer(username As String, password As String, newPasswordQuestion As String, newPasswordAnswer As String) As Boolean

    End Function

    Public Overrides Function CreateUser(username As String, password As String, email As String, passwordQuestion As String, passwordAnswer As String, isApproved As Boolean, providerUserKey As Object, ByRef status As System.Web.Security.MembershipCreateStatus) As System.Web.Security.MembershipUser

    End Function

    Public Overrides Function DeleteUser(username As String, deleteAllRelatedData As Boolean) As Boolean

    End Function

    Public Overrides ReadOnly Property EnablePasswordReset As Boolean
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property EnablePasswordRetrieval As Boolean
        Get

        End Get
    End Property

    Public Overrides Function FindUsersByEmail(emailToMatch As String, pageIndex As Integer, pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection

    End Function

    Public Overrides Function FindUsersByName(usernameToMatch As String, pageIndex As Integer, pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection

    End Function

    Public Overrides Function GetAllUsers(pageIndex As Integer, pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection

    End Function

    Public Overrides Function GetNumberOfUsersOnline() As Integer

    End Function

    Public Overrides Function GetPassword(username As String, answer As String) As String

    End Function

    Public Overloads Overrides Function GetUser(providerUserKey As Object, userIsOnline As Boolean) As System.Web.Security.MembershipUser

    End Function

    Public Overloads Overrides Function GetUser(username As String, userIsOnline As Boolean) As System.Web.Security.MembershipUser

    End Function

    Public Overrides Function GetUserNameByEmail(email As String) As String

    End Function

    Public Overrides ReadOnly Property MaxInvalidPasswordAttempts As Integer
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property MinRequiredNonAlphanumericCharacters As Integer
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property MinRequiredPasswordLength As Integer
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property PasswordAttemptWindow As Integer
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property PasswordFormat As System.Web.Security.MembershipPasswordFormat
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property PasswordStrengthRegularExpression As String
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property RequiresQuestionAndAnswer As Boolean
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property RequiresUniqueEmail As Boolean
        Get

        End Get
    End Property

    Public Overrides Function ResetPassword(username As String, answer As String) As String

    End Function

    Public Overrides Function UnlockUser(userName As String) As Boolean

    End Function

    Public Overrides Sub UpdateUser(user As System.Web.Security.MembershipUser)

    End Sub

    Public Overrides Function ValidateUser(username As String, password As String) As Boolean

    End Function
End Class

然后在web.config中注册自定义提供程序:

<membership defaultProvider="MyMembership">
    <providers>
        <clear />
        <add 
            name="MyMembership" 
            type="MvcApplication1.MyCustomMembershipProvider, MvcApplication1" enablePasswordRetrieval="false" 
        />
    </providers>
</membership>

现在,您可以在控制器中使用Membership类。例如,在您创建项目时由默认模板生成的LogOn操作中,您无需更改任何内容:

<HttpPost()> _
Public Function LogOn(ByVal model As LogOnModel, ByVal returnUrl As String) As ActionResult
    If ModelState.IsValid Then
        If Membership.ValidateUser(model.UserName, model.Password) Then
            FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe)
            If Url.IsLocalUrl(returnUrl) AndAlso returnUrl.Length > 1 AndAlso returnUrl.StartsWith("/") _
               AndAlso Not returnUrl.StartsWith("//") AndAlso Not returnUrl.StartsWith("/\\") Then
                Return Redirect(returnUrl)
            Else
                Return RedirectToAction("Index", "Home")
            End If
        Else
            ModelState.AddModelError("", "The user name or password provided is incorrect.")
        End If
    End If

    ' If we got this far, something failed, redisplay form
    Return View(model)
End Function

Membership的所有来电现在都将使用您在web.config中注册的自定义成员资格提供程序。

答案 1 :(得分:1)

我有一个更简单的解决方案。使用nuget安装griffin.mvccontrib。然后创建一个这样的新类:

public class MyAccountRepository implements IAccountRepository
end class

按界面上的CTRL+.以导入正确的命名空间。按类名称CTRL+.以获取所有方法及其描述。

然后只需使用EmployeeDBContext

实施它们

通过这样做,您可以保留其他所有内容(使用标准的互联网MVC模板)

说明:http://blog.gauffin.org/2011/09/a-more-structured-membershipprovider/