로그인 한 사용자가 Identity.Name을 설정하지 않은 경우가 있습니다 (제 경우에는 내 앱을 일부 미친 시스템에 통합해야합니다). 그런 다음 두 가지 방법이 주위에있다 :
1) 비보안 - 모든 사용자가 자신의 인증 상태에 관계없이 antiforgery 시스템에 의해 같은 방식으로 처리됩니다
// System.Web.WebPages.dll
using System.Web.Helpers;
// not a production solution
public class MvcApplication : HttpApplication {
protected void Application_Start() {
AntiForgeryConfig.SuppressIdentityHeuristicChecks = true;
}
}
2) 보안 - 자신의 (정의) 방식으로 방법을 제공 당신은 당신의 사용자를 구별 ContoscoHttpContext
가 현재 컨텍스트를 기반으로 사용자 ID (또는 고유 한 사용자 토큰을)를 돌려줍니다 (즉 HttpContextBase
)입니다
using System;
using System.Globalization;
using System.Web;
using System.Web.Helpers;
public class ContoscoAntiForgeryAdditionalDataProvider : IAntiForgeryAdditionalDataProvider {
public string GetAdditionalData(HttpContextBase context) {
if (context == null) {
throw new ArgumentNullException("context");
}
var contoscoContext = new ContoscoHttpContext(context);
int userID = contoscoContext.GetUserID().GetValueOrDefault();
return Convert.ToString(userID, CultureInfo.InvariantCulture);
}
public bool ValidateAdditionalData(HttpContextBase context, string additionalData) {
string data = GetAdditionalData(context);
return string.Compare(data, additionalData, StringComparison.Ordinal) == 0;
}
}
public class MvcApplication : HttpApplication {
protected void Application_Start() {
AntiForgeryConfig.AdditionalDataProvider =
new ContoscoAntiForgeryAdditionalDataProvider();
}
}
:
가
public class ContoscoHttpContext {
private HttpContextBase _context;
public ContoscoHttpContext(HttpContextBase context) {
_context = context;
}
public int? GetUserID() {
// TODO: provide your own implementation how to get user id
// based on HttpContextBase stored in _context
// in my case it was something like
// return ((ContoscoPrincipal)_context.User).UserID;
}
}
내 실제 문제는 "방금 처음 디버깅을 시작 했는데도 내 사용자가 어떻게 로그인합니까?"입니다. – Ortund