こんにちは皆さん、私はカスタムメンバーシッププロバイダーとカスタムロールプロバイダーを使用しています。そして、これらを正しく使用してログインしています。また、他のユーザー情報にアクセスできるように、独自のMembershipユーザーオブジェクトを実装しました。ページを変更するたびにすべてのデータを読み込む必要はありませんが、現在、これを正しく機能させることはできません。以下は私のユーザーオブジェクトです:
public class User : MembershipUser
{
[Required(ErrorMessage = "Username cannot be blank")]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required(ErrorMessage = "Password cannot be blank")]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[Display(Name = "User ID")]
public long UserID { get; set; }
[Display(Name = "Family Name")]
[StringLength(50, ErrorMessage = "Family name cannot be longer than 50 characters")]
public string FamilyName { get; set; }
[Display(Name = "Given Name")]
[StringLength(50, ErrorMessage = "Given name cannot be longer than 50 characters")]
public string GivenName { get; set; }
public Company Company { get; set; }
public virtual IIdentity Identity { get; set; }
}
そして、ユーザーがログインすると、次のログインメソッドを呼び出します。
[AllowAnonymous]
[HttpPost]
public ActionResult Login(User model, string returnUrl)
{
FormsAuthentication.SignOut();
if(Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, true);
return RedirectToAction("Index", "");
}
ViewBag.Message = "Failed to login";
return View();
}
しかしHttpContext.User
、インデックスを呼び出すと、名前/ IDだけが含まれ、残りのユーザーオブジェクトは含まれません。カスタムFormAuthentication
オブジェクトを作成する必要がありますか?それとも、このすべてのユーザー情報をHttpContext.Session
オブジェクト内に保存するのが標準的なプロセスですか?または、ユーザーに拡張してもらいますSystem.Security.Principle.IPrinciple
か?またはController.TempData
?または、私がよく知らない他の場所。ユーザーデータをロードするために毎回データベースにアクセスする必要はありません。
これらが明白な質問である場合は申し訳ありませんが、私はWeb開発にかなり慣れておらず、これらのことを行う一般的な方法が何であるかわかりません。ビルド内の承認属性を使用しようとしています。