.NET 4.0中的自定义MembershipProvider

 2023-02-16    313  

问题描述

此处有一些线程,但大多数是过时的,它们中的参考链接更加过时.

我得到了这个网站,我需要用它自己的表结构连接到外部SQL Server(MSSQL),使用默认的ASP.NET隶属提供程序结构不是一个选项.表布局真的很简单,usertable看起来像这样(它被称为个人)

.NET 4.0中的自定义MembershipProvider

Individuals
- UserGuid (uniqueidentifier/guid, unique)
- Name (varchar)
- Password (varchar)
- HasAccess (tinyint/ 1 or 0)
- DateTime (datetime)
- Log (xml)

所需的功能只是记录某人,其余的不是必需的:)

我遵循一些指南,但大多数是过时的,非常复杂.不幸的是,MSDN示例遵循此模式,文档不是很好.

所以如果有人有一些资源显示如何,或者愿意在这里发布邮寄或类似的资源,我会很感激.

谢谢!

推荐答案

它非常简单:

  1. 创建一个新的类文件(如果您未使用多层系统,则在项目的型号文件夹中,我们称为MyMembershipProvider.cs

  2. 从System.Web.Security.MembershipProvider

  3. 继承该类

  4. 自动创建所需的方法(继承类中的句点+空格)

完成!

所有方法都将具有NotImplementedException异常,您需要做的就是编辑每个方法并放置您自己的代码.例如,我定义GetUser,如下所示:

public override MembershipUser GetUser(string username, bool userIsOnline)
{
    return db.GetUser(username);
}

db是我添加到类中的数据库存储库,如

MyServicesRepository db = new MyServicesRepository();

在那里,你会发现GetUser方法是:

public MembershipUser GetUser(string username)
{
    OS_Users user = this.FindUserByUsername(username);

    if (user == null)
        return
        new MembershipUser(
            providerName: "MyMembershipProvider",
            name: "",
            providerUserKey: null,
            email: "",
            passwordQuestion: "",
            comment: "",
            isApproved: false,
            isLockedOut: true,
            creationDate: DateTime.UtcNow,
            lastLoginDate: DateTime.UtcNow,
            lastActivityDate: DateTime.UtcNow,
            lastPasswordChangedDate: DateTime.UtcNow,
            lastLockoutDate: DateTime.UtcNow);

    return
        new MembershipUser(
            providerName: "MyMembershipProvider",
            name: user.username,
            providerUserKey: null,
            email: user.email,
            passwordQuestion: "",
            comment: "ANYTHING you would like to pass",
            isApproved: true,
            isLockedOut: user.lockout,
            creationDate: user.create_date,
            lastLoginDate: user.lastLoginDate,
            lastActivityDate: user.lastActivityDate,
            lastPasswordChangedDate: user.lastPasswordChangedDate,
            lastLockoutDate: user.lastLockoutDate);
}

为您使用的所有方法执行此操作(调试项目并查看您需要哪些) – 我只使用一些,而不是我真正不关心的是ChangePasswordQuestionAndAnswer,DeleteUser等的方法

只需确保在web.config中,您将新成员资格添加为:

<membership defaultProvider="MyMembershipProvider">
  <providers>
    <clear/>
    <add name="MyMembershipProvider" type="Your.NameSpace.MyMembershipProvider" connectionStringName="OnlineServicesEntities"
         enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
         maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
         applicationName="/" />
  </providers>
</membership>

你有一个很好的视频教程来自克里斯帕尔斯(2007年日期,但仍然大多有效)和代码,虽然视频教程在vb中,但让您了解步骤……

我不仅创建了我自己的会员提供者,而且我创建了我的角色提供者,你可以从上面的代码看,这是一个简单的成员资格,让你在你的申请中使用类似的东西:

[Authorize(Roles = "Partner, Admin")]
public ActionResult MyAction()
{

}

@if (Roles.IsUserInRole(Context.User.Identity.Name, "Admin"))
{
    <div>You're an ADMIN, Congrats!</div>
}

什么是自动创建所需的方法(继承类中的时段+空间)

您可以右键单击,或者在名称上键盘,然后按控制 + .,然后按 SPACE .

其他推荐答案

这里有几个线程
关于这个问题,但大多数是
过时和参考链接
它们更加过时.

自框架中引入ASP.NET 1.0页面.USER/Currentsession.USER/IPRINCIPAL/IIDENTITY模型不变.在Framework 2.0中,会员提供商已添加.那些”过时”的参考仍然是有效的指导. msdn

以上所述是小编给大家介绍的.NET 4.0中的自定义MembershipProvider,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/33818.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。