Внедрение Custom MembershipUser
Я собираюсь кругами и нуждаюсь в некоторой помощи в реализации Custom MembershipUser, поэтому я могу добавить свои собственные пользовательские свойства в MemberhipUser.
Я слежу за примером на этом сайте: Практическое руководство. Внедрение пользовательского пользовательского пользователя
Проблема, с которой я столкнулась, заключается в конструкторе CustomMembershipUser, я думаю.
My CustomMembershipUser имеет три дополнительных свойства: firstName, middleName, lastName.
public class CustomMembershipProvider : MembershipProvider
{
public override MembershipUser GetUser(string username, bool userIsOnline)
{
//.... Get data from database
MembershipUser baseUser = new MembershipUser(this.Name,
username,
userId,
email,
"",
comment,
isApproved,
isLockedOut,
dtCreate,
dtLastLogin,
dtLastActivity,
DateTime.Now,
dtLastLockoutDate);
return new CustomMembershipUser(baseUser, firstName, middleName, lastName)
}
}
public class CustomMembershipUser : MembershipUser
{
private string _firstName;
public string FirstName { get { return _firstName; } set { _firstName = value; } }
private string _middleName;
public string MiddleName { get { return _middleName; } set { _middleName = value; } }
private string _lastName;
public string LastName { get { return _lastName; } set { _lastName = value; } }
public CustomMembershipUser(MembershipUser baseuser, string firstname, string middlename, string lastname)
{
_firstName = firstname;
_middleName = middlename;
_lastName = lastname;
new CustomMembershipUser(baseuser); // DO I NEED THIS?? HOW TO IMPLEMENT??
}
}
Я называю это так:
MembershipUser mu = Membership.GetUser(UserName);
CustomMembershipProvider p = (CustomMembershipProvider)Membership.Provider;
MembershipUser memUser = p.GetUser(UserName, true);
object userId = memUser.ProviderUserKey;
ProviderUserKey имеет значение null, а также другие значения.
Как я могу получить добавленные свойства, добавленные мной?
Спасибо
Ответы
Ответ 1
Это работает для меня:
public class CustomMembershipUser : MembershipUser
{
public CustomMembershipUser(
string providerName,
string name,
object providerUserKey,
string email,
string passwordQuestion,
string comment,
bool isApproved,
bool isLockedOut,
DateTime creationDate,
DateTime lastLoginDate,
DateTime lastActivityDate,
DateTime lastPasswordChangedDate,
DateTime lastLockoutDate
)
: base(providerName, name, providerUserKey, email, passwordQuestion,
comment, isApproved, isLockedOut, creationDate, lastLoginDate,
lastActivityDate, lastPasswordChangedDate, lastLockoutDate)
{
}
// Add additional properties
public string CustomerNumber { get; set; }
}
public class CustomMembershipProvider : MembershipProvider
{
public override MembershipUser GetUser(string username, bool userIsOnline)
{
if (string.IsNullOrEmpty(username))
{
// No user signed in
return null;
}
// ...get data from db
CustomMembershipUser user = new CustomMembershipUser(
"CustomMembershipProvider",
db.Username,
db.UserId,
db.Email,
"",
"",
true,
false,
db.CreatedAt,
DateTime.MinValue,
DateTime.MinValue,
DateTime.MinValue,
DateTime.MinValue);
// Fill additional properties
user.CustomerNumber = db.CustomerNumber;
return user;
}
}
// Get custom user (if allready logged in)
CustomMembershipUser user = Membership.GetUser(true) as CustomMembershipUser;
// Access custom property
user.CustomerNumber
Ответ 2
Основываясь на моем собственном опыте, пытающемся сделать многое из того же самого, попытка использовать членствоProvider для этого будет в конечном счете разочаровывающим и противоречивым опытом.
Идея модели поставщика членства заключается в том, чтобы не изменять или не увеличивать то, что определение пользователя, как вы пытаетесь сделать, - это позволить Framework альтернативным средствам доступа к информации, которая уже была определяемый как принадлежащий к "Члену-члену".
Я думаю, что вы действительно ищете профиль пользователя. Использование ASP.NET-профилей - это лодка легче, чем реализация собственного поставщика. Вы можете найти обзор здесь.
Ответ 3
Просто, чтобы вы знали, я пытался дойти до пути MembershipProvider до этого, и он длинный и ветреный. Вы можете увидеть, будет ли только создание классов, реализующих IPrincipal и IIdentity, удовлетворять ваши потребности, поскольку они влекут за собой намного меньшие накладные расходы.