私は自分のカスタムメンバーシップとロールプロバイダを開発しました。 System.Web.Security.Membershipクラスは、実装していないCreateUserメソッドを呼び出します(目的に応じて、私のMembershipUserに詳細情報が必要です)。メンバーシップクラスはカスタムプロバイダで「間違った」メソッドを呼び出しますか?
このシナリオでは、メンバーシップクラスを使用する必要がありますか?
私の実装したCreateUserメソッドを使用するには、自分のメンバーシッププロバイダに型キャストしてください。私は少し失われた感じ、私はこれをどのように処理する必要がありますか?
((MyMembershipProviderBase)Membership.Provider).CreateUser(username, password, email, lastName, firstName, phoneNumber, out status);
メンバーシッププロバイダーでCreateUser-方法:
public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
{
throw new NotImplementedException();
}
public MyMembershipUser CreateUser(
string username, string password, string email, string lastName, string firstName,
string phoneNumber, out MembershipCreateStatus status)
{
// implemented...
}
*コメントを@elkdangerする編集
RESPONS。
これはあなたのコメントで参照している種類のラッパーですか?
メンバークラスは、自分の実装にリダイレクトする標準のCreateUserメソッドを呼び出します。問題は、ユーザーの追加情報(firstname、lastename、およびphonenumber)を設定できないことです。これは、どこか他の場所からの追加情報の設定を処理する方法ですか(私はどこでユーザーを作成しますか)?
public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion,
string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
{
return this.CreateUser(username, password, email, "", "", "", out status);
}
public MyMembershipUser CreateUser(
string username, string password, string email, string lastName, string firstName,
string phoneNumber, out MembershipCreateStatus status
)
{
var args =
new ValidatePasswordEventArgs(username, password, true);
OnValidatingPassword(args);
if (args.Cancel)
{
status = MembershipCreateStatus.InvalidPassword;
return null;
}
if (RequiresUniqueEmail && GetUserNameByEmail(email) != "")
{
status = MembershipCreateStatus.DuplicateEmail;
return null;
}
MembershipUser u = GetUser(username, false);
if (u == null)
{
try
{
status = Repository.CreateUser(username, EncodePassword(password), email, lastName, firstName,
phoneNumber);
}
catch
{
status = MembershipCreateStatus.ProviderError;
}
return (MyMembershipUser)GetUser(username, false);
}
else
{
status = MembershipCreateStatus.DuplicateUserName;
return null;
}
}
コメントありがとうございます!ラッパーがあなたの提案をどのように実装すべきかを完全に理解しているかどうかは分かりませんが、私はこれを試して、上記の私のポストを更新しました。 – user579089
私はCreate Wizardコントロールを使用していません。私は新しいMVCソリューションを使い始めました。そして、Providersの実装に慣れました。目標は、組み込みのユーザーと役割の機能を使用できるようにすることですが、データベースに格納されるユーザー情報(および役割)の方法と方法を制御できます。 – user579089