System.Web.Security.MembershipUserユーザーを取得しようとしているので、lastPasswordChangedDateプロパティを確認できますが、問題はnullが返されることだけです。
私は周りを見回しましたが、同様の問題のほとんどは、オブジェクトを作成しようとしたときにユーザーが認証されていないことが原因のようです。私の場合、別のクラスではありますが、ユーザーはメソッドを呼び出す直前に認証されます。
ポインタはありますか?
擬似コードは次のとおりです:
フロントエンド---->Login.cs
string userName = txtUser.Text; string password = txtPW.Text;
wsAuth = new wsAuth();
wsAuthentication.Authenticate(userName,password);
認証サービス---->
public bool Authenticate(string userName, string password)
{
SecurityProviderSettings settings = SecurityProviderSettings.GetFromConfiguration("SecurityProviders");
ProviderSetting providerSetting = settings.Providers[providerName];
object provider = Activator.CreateInstance(providerType);
return ((IAuthenticationProvider)provider).Authenticate(userName, password, providerSetting.CustomInfo, out failReason, out token);
}
特定のプロバイダー---->
public bool Authenticate(string userName, string password, out string failReason .....)
{
SqlMembershipProvider provider = new SqlMembershipProvider();
#region settings
//blablabla
#endregion
provider.initialize(/*input vars*/);
bool authenticated = provider.ValidateUser(userName,password);
if(authenticated)
{
pwValidator val = new pwValidator();
if(!val.IsInLifetime(userName,password))
{
failReason = "password expired";
}
}
}
PasswordValidator ---->
public bool IsInLifetime(string userName, string password)
{
MembershipUser user = Membership.GetUser(userName);
MembershipUser user2 = Membership.GetUser();
#bla bla bla
}