2014-10-17 16 views
17

मुझे एमवीसी 5 के लिए मानक एएसपी पहचान प्रदाता के साथ कोई समस्या है। जैसे ही मैं विधि में लॉग इन करता हूं:एएसपी.नेट पहचान प्रदाता साइनइन प्रबंधक वापसी विफलता रखता है

await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); 

विफलता लौटता रहता है। तब

UserManager.FindByEmail(model.Email); 

यह मेरे उपयोगकर्ता में लॉग इन करने की कोशिश कर के लिए एक वैध UserID रिटर्न मैं प्रयोग किया है:: तो मैं डिबगिंग शुरू कर दिया, का उपयोग करके।

SignInManager.UserManager.CheckPassword(UserIDObtainedFromFind, model.Password); 

और यह सच देता है, पासवर्ड जिसका मतलब है मैं मान्य है प्रदान करते हैं ....

Sign In failure

मैं कैसे, SignInM डिबग का पता लगा सकते हैं पर कोई भी विचार anager.PasswordSignInAsync यह देखने के लिए कि यह कहां विफल रहता है?

उत्तर

57

SignInManager.PasswordSignIn उपयोगकर्ता नाम के बंद काम करता है, आप जाँच करें कि उपयोगकर्ता नाम ईमेल आप में से गुजर रहे हैं के रूप में ही है को दोगुना करना चाहिए

+0

ठीक है आप सही कहां हैं। मैंने उपयोगकर्ता का स्क्रीन नाम स्टोर करने के लिए अपना उपयोगकर्ता नाम फ़ील्ड इस्तेमाल किया। इसे वापस वापस लेना और स्क्रीन नाम फ़ील्ड जोड़ने से मेरी समस्या हल हो गई। धन्यवाद! –

+0

यदि आप मैन्युअल –

16

username != email हैं:।

ApplicationUser signedUser = UserManager.FindByEmail(model.Email); 
var result = await SignInManager.PasswordSignInAsync(signedUser.UserName, model.Password, model.RememberMe, shouldLockout: false); 
+0

कर रहे हैं तो आपको NormalizedUserName भी वापस लेना चाहिए, कोड पोस्ट करते समय उचित स्वरूपण का उपयोग करें। आप इनपुट फ़ील्ड के ठीक ऊपर {} बटन का उपयोग कर सकते हैं। बेहतर पठनीयता के लिए बनाता है। प्रोफाइलर का उल्लेख करने के लिए – SubliemeSiem

1

मुझे, मैं के लिए पासवर्ड SignInAsync कॉल करने वाली क्वेरी को देखने के लिए SQL प्रोफाइलर का उपयोग करना उपयोगी पाया। मेरे मामले में - मैंने देखा है कि यह उपयोगकर्ता को "UserContext" पर एक डिस्कमिनेटर सेट के साथ ढूंढने का प्रयास कर रहा था। यह निश्चित रूप से मेरे लिए काम नहीं कर रहा था क्योंकि मैंने एएसपी.NET सदस्यता सेवाओं से अपग्रेड किया था और यह डिस्कमिनेटर उपयोगकर्ता को सेट किया गया था। चूंकि नया कोड एंटिटी फ्रेमवर्क का उपयोग करता है, ऐसा लगता है कि यह मान उस क्लास से लिया गया है जिसका उपयोग आप अपने उपयोगकर्ता के लिए करते हैं। एक त्वरित अद्यतन कथन मुद्दे को हल किया।

UPDATE AspNetUsers SET Discriminator = 'UserContext' WHERE Discriminator = 'User' 
+0

+1, इसे वर्षों से उपयोग नहीं किया था, इसके बारे में भूल गया था, लेकिन यह वही था जो मुझे चाहिए था। धन्यवाद! – Resource

0

इसके लिए मुझे

ApplicationUser signedUser = UserManager.FindByEmail(model.Email); 
var result = await SignInManager.PasswordSignInAsync(signedUser.UserName, model.Password, model.RememberMe, shouldLockout: false); 
0
ApplicationUser signedUser = UserManager.FindByEmail(model.Email); 
var result = await SignInManager.PasswordSignInAsync(signedUser.UserName, 
model.Password, model.RememberMe, shouldLockout: false); 

यह मेरे लिए काम किया, क्योंकि अपना उपयोगकर्ता नाम अपने ईमेल के बराबर नहीं किया गया कार्य है। आपका ईमेल और उपयोगकर्ता नाम वही होना चाहिए।

0

अब पुराना है, लेकिन यहां इस मुद्दे पर मेरी कमी है।

मैं पहचान डेटाबेस में कुछ मानक चीजें बना रहा था ताकि पहचान डेटाबेस (भूमिकाएं और व्यवस्थापक खाता) में कुछ मानक चीजें मौजूद हों।

मैं संस्थाओं को बना रहा था और किसी भी लापता भूमिका या उस उपयोगकर्ता को बनाने के लिए संदर्भ में सीधे बात कर रहा था। मेरे पास यह मुद्दा था कि मैं NormalizedUserName और NormalizedEmail फ़ील्ड सेट नहीं कर रहा था। मैं बस Email और UserName सेटिंग कर रहा था।

अंतिम कोड मैं (एफई कोर 2.x के साथ) का उपयोग है की तरह कुछ:

 if (!_context.Users.Any(_ => _.Id.Equals(Users.AdministratorId))) 
     { 
      var user = new ApplicationUser 
      { 
       Id = Users.AdministratorId, 
       UserName = Users.AdministratorEmail, 
       Email = Users.AdministratorEmail, 
       EmailConfirmed = true, 
       NormalizedEmail = Users.AdministratorEmail.ToUpper(), 
       NormalizedUserName = Users.AdministratorEmail.ToUpper(), 
       SecurityStamp = Guid.NewGuid().ToString() 
      }; 

      var hasher = new PasswordHasher<ApplicationUser>(); 
      user.PasswordHash = hasher.HashPassword(user, "our_password"); 

      _context.Users.Add(user); 
     } 
0

अपने स्टार्टअप की जांच में:

options.SignIn.RequireConfirmedEmail = false; 
options.SignIn.RequireConfirmedPhoneNumber = false; 

इन सही पर सेट किया जाता है, तो आप की जरूरत है लॉगिन करने से पहले ईमेल या फोन नंबर की पुष्टि करें।

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