Ответ 1
Это очень просто:
-
Создайте новый файл класса (если вы не используете многоуровневую систему в папке "Модели моделей" ), позвоните
MyMembershipProvider.cs
-
Наследовать этот класс из
System.Web.Security.MembershipProvider
-
автоматически создайте необходимые методы (период + пробел в классе inherit)
Готово!
Все методы будут иметь исключение 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>
У вас есть хороший видео-учебник от Chris Pels (датированный 2007 годом, но по-прежнему в основном действительный) и код для этого, хотя видео-учебник находится в VB, но дайте понять шаги...
http://www.asp.net/general/videos/how-do-i-create-a-custom-membership-provider
Я создал не только свой собственный провайдер членства, но и я создал свой поставщик ролей, ведь, как вы можете видеть из вышеприведенного кода, он прост, как и MemberShip, и позволяет вам в приложении используйте такие вещи, как:
[Authorize(Roles = "Partner, Admin")]
public ActionResult MyAction()
{
}
и
@if (Roles.IsUserInRole(Context.User.Identity.Name, "Admin"))
{
<div>You're an ADMIN, Congrats!</div>
}
Что автоматическое создание необходимых методов (период + пробел в классе inherit)
Вы можете щелкнуть правой кнопкой мыши или навести курсор на имя и нажать Control + ., а затем space.