2013-10-13 12 views
18

एंटिटी फ्रेमवर्क 6.0.0-आरसी 1 (विज़ुअल स्टूडियो 2013 आरसी के साथ आने वाले) के साथ एएसपीनेट पहचान संस्करण 1.0.0-आरसी 1 का उपयोग कर वर्तमान उपयोगकर्ता के उपयोगकर्ता नाम बदलने के बाद प्रमाणीकरण कुकीज़ कैसे बदलें।एएसपीनेट पहचान

उपयोगकर्ताओं को UserName बदलने का अवसर देने का प्रयास कर रहा है। AuthenticationIdentityManager के तहत उस के लिए कोई फ़ंक्शन नहीं लगता है, इसलिए मैं ईएफ का उपयोग कर डेटा बदलता हूं (वर्तमान उपयोगकर्ता के लिए उपयोगकर्ता ऑब्जेक्ट प्राप्त करें, उपयोगकर्ता नाम बदलें और परिवर्तनों को सहेजें)।

समस्या यह है कि प्रमाणीकरण कुकीज़ अपरिवर्तित बनी हुई है, और अगला अनुरोध विफल रहता है क्योंकि ऐसा कोई उपयोगकर्ता नहीं है।

अतीत में फॉर्म प्रमाणीकरण के साथ मैंने इसे हल करने के लिए निम्न कोड का उपयोग किया।

var formsAuthCookie = Request.Cookies[FormsAuthentication.FormsCookieName]; 
var isPersistent = FormsAuthentication.Decrypt(formsAuthCookie.Value).IsPersistent; 
FormsAuthentication.SetAuthCookie(newUserName, isPersistent); 

कुकीज़ को अपडेट करने के लिए मुझे एएसपीनेट पहचान के साथ क्या करना चाहिए?

अद्यतन

निम्नलिखित कोड प्रमाणीकरण कुकी अद्यतन करने के लिए लगता है।

var identity = new ClaimsIdentity(User.Identity); 
identity.RemoveClaim(identity.FindFirst(identity.NameClaimType)); 
identity.AddClaim(new Claim(identity.NameClaimType, newUserName)); 
AuthenticationManager.AuthenticationResponseGrant = new AuthenticationResponseGrant 
    (new ClaimsPrincipal(identity), new AuthenticationProperties {IsPersistent = false}); 

शेष समस्या है: कैसे वर्तमान प्रमाणीकरण कुकी से IsPersistent मान प्राप्त करने के?

उत्तर

15

How do you login/authenticate a user with Asp.Net MVC5 RTM bits using AspNet.Identity?

private async Task SignInAsync(ApplicationUser user, bool isPersistent) 
{ 
    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie); 
    var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie); 
    AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity); 
} 

RC1 के लिए, आप समान कोड का उपयोग कर सकते हैं।

AuthenticationManager.SignOut(); 
IdentityManager.Authentication.SignIn(AuthenticationManager, user.UserId, isPersistent:false); 

लगातार मूल्य के लिए, आपको प्रमाणीकरण कुकी तक पहुंचने और स्थिति पुनर्प्राप्त करने की आवश्यकता है।

अपडेट किया गया: उचित AuthenticationType

उपयोग "वाहक" के स्थान पर इस्तेमाल किया। यह भी सुनिश्चित करें कि साइनइन टिकट जारी करते समय, आप प्रमाणीकरणप्रॉपर्टीज सेट कर रहे हैं। IpPersistent।

bool isPersistent=false; 
var authContext = await Authentication.AuthenticateAsync("Bearer"); 
if (authContext != null) 
{ 
    var aProperties = authContext.Properties; 
    isPersistent = aProperties.IsPersistent; 
} 
+0

यह कोड आरटीएम (अभी तक व्यापक रूप से उपलब्ध नहीं है) के लिए काम कर सकता है। आरसी 1 में कोई डिफ़ॉल्ट प्रमाणीकरण प्रकार और उपयोगकर्ता प्रबंधक नहीं हैं। क्रिएटिडेंटिटीएसिंक()। – aleyush

+0

दूसरा प्रश्न: मैं वर्तमान IsPersistent मान कैसे प्राप्त कर सकता हूं (मेरा लक्ष्य केवल उपयोगकर्ता नाम बदलने के लिए है, और कुछ नहीं)? – aleyush

+0

वीएस2013 की रिहाई से पहले, रात के निर्माण के साथ परीक्षण रखना अच्छा होता है। डेवलपर्स से यहां कुछ टिप्पणियों में कहा गया है कि आरटीएम में कई आरसी 1 कक्षाएं उपलब्ध नहीं हैं जो नवंबर – jd4u

संबंधित मुद्दे