안녕하세요, 저는 사용자 지정 멤버 자격 공급자 및 사용자 지정 역할 공급자를 사용하고 있습니다. 그리고 이것을 올바르게 사용하여 로그인하고 있습니다. 또한 다른 사용자 정보에 액세스 할 수 있도록 내 회원 전용 사용자 개체를 구현했으며 페이지를 변경할 때마다 모든 데이터를로드 할 필요가 없지만 현재는 제대로 작동하지 않습니다.사용자 지정 멤버십/역할 공급자를 사용할 때 사용자 지정 httpcontext 사용자를 사용하는 방법
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
에? 또는 다른 곳에서 나는 익숙하지 않다. 사용자 데이터를로드 할 때마다 매번 데이터베이스에 도달해야합니다.
미안 이러한 것들이 명백한 질문이라면 나는 웹 개발을 처음 접했고 이러한 일을하는 일반적인 방법이 무엇인지 확신 할 수 없다. in build Authorize 속성을 사용하려고합니다.
나는이 서로 다른/더 나은 방법으로 수행하지만,이 충분 입증 할 수있는 확신 나를 위해. – MiBu
감사의 말을 전합니다. 비슷한 일을하고 있었지만 사용자 객체가 약 1000 자 정도이기 때문에 문제가있었습니다. 그래서 필요한 나머지 사용자 정보를 세션 객체에 넣기로 결정했습니다. – user1434177
IsAuthenticated가 true를 반환하는 이유는 무엇입니까? – Dementic