की अवधि के बाद कस्टम दावा जानकारी खो देती है मैं प्रत्येक अनुरोध पर अनावश्यक डेटाबेस प्रश्नों से बचने के लिए एएसपी.NET पहचान कुकी में उपयोगकर्ता के वास्तविक नाम जैसे कस्टम दावों को संग्रहीत कर रहा हूं। अपेक्षा के अनुरूपपहचान कुकी
private static string GetClaim(string claimType)
{
var identity = (ClaimsPrincipal) Thread.CurrentPrincipal;
var claim = identity.Claims.SingleOrDefault(o => o.Type == claimType);
return claim == null ? null : claim.Value;
}
identity.Claims
संपत्ति निम्नलिखित दावे हैं,:
var identity = await user.GenerateUserIdentityAsync(UserManager);
identity.AddClaim(new Claim(ClaimTypes.GivenName, user.FirstName)));
// etc.
AuthenticationManager.SignIn(new AuthenticationProperties {IsPersistent=true}, identity);
यह ठीक काम करता है, और मैं के साथ इन दावों को प्राप्त कर सकते हैं: कम से कम है कि मैं क्या यह मान कोड कर रही है है
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier: ced2d16c-cb6c-4af0-ad5a-09df14dc8207
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name: [email protected]
http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider: ASP.NET Identity
AspNet.Identity.SecurityStamp: 284c648c-9cc7-4321-b0ce-8a347cd5bcbf
http://schemas.microsoft.com/ws/2008/06/identity/claims/role: Admin
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname: My Name
समस्या यह है कि कुछ समय बाद (आमतौर पर कई घंटे), मेरे कस्टम दावे गायब होने लगते हैं - इस उदाहरण में, givenname
अब एन्युमरेट में मौजूद नहीं है आयन। उपयोगकर्ता अभी भी प्रमाणीकृत है, और सभी डिफ़ॉल्ट दावे अभी भी वहां हैं।
क्या चल रहा है, और मैं इसे कैसे ठीक कर सकता हूं? एकमात्र चीज जो मैं सोच सकता हूं वह यह है कि कुकी समाप्त हो रही है और दृश्यों के पीछे फिर से जारी की जा रही है, लेकिन मुझे नहीं पता कि क्यों (या अगर) ऐसा होगा।
हाय @ जेम्स। क्या मेरे द्वारा एक सवाल पूछा जा सकता है। आपने कहा था कि आप इसे "हर अनुरोध पर अनावश्यक डेटाबेस प्रश्नों से बचने" के लिए कर रहे थे। इससे मुझे लगता है कि पहचान को प्रत्येक अनुरोध पर डेटाबेस तक पहुंचना चाहिए। क्या यह सच है? मैंने एक बहुत ही सरल परीक्षण किया और यह डेटाबेस तक पहुंचने के लिए प्रतीत नहीं हुआ ('DbContext.Database.Log' से कोई आउटपुट नहीं होने पर), लेकिन शायद इसे कैश किया गया था। प्रति HTTP अनुरोध डेटाबेस पहुंच के रूप में जानना अच्छा लगेगा बुरी खबर होगी। –
@ जोन्सस्मिथ अगर मैंने उपयोगकर्ता के वास्तविक नाम को कहीं भी कैश नहीं किया है (यानी ऑथ कुकी में), तो मुझे हर बार ग्राहक टेबल से पूछताछ करना होगा कि मैं जानना चाहता हूं कि उनका नाम क्या है। – James
हाय @ जेम्स। ठीक है, मुझे अब मिल गया है। मेरे पास लगभग एक ही समस्या थी लेकिन डेटाबेस में दावा के रूप में इसे जोड़कर यह कुकी में स्वचालित रूप से दिखाई दिया। मुझे लगता है कि कुकी को सभी उपयोगकर्ता की जानकारी लेनी होगी, इस तरह यह एक लुकअप की आवश्यकता के बिना आईप्रिनिस्टर को स्थापित करता है। –