मैं समझने की कोशिश कर रहा हूं कि ओएथ कैसे काम करता है, लेकिन यह एक बड़े जादू शो की तरह लगता है, और मुझे यह पसंद नहीं है।OWIN के साथ OAuth कैसे MVC5 में काम करता है?
मैंने एक नया एमवीसी 5 प्रोजेक्ट बनाया है और फेसबुक प्रमाणीकरण सक्षम किया है। यह सब ठीक काम करता है, हालांकि, मैं यह समझने की कोशिश कर रहा हूं कि यह कैसे काम करता है।
यहां वह हिस्सा है जहां मैं खो गया हूं। कल्पना करें कि उपयोगकर्ता पहली बार लॉग इन करना चाहता है। इस विधि निष्पादित होने
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
return RedirectToAction("Login");
}
// Sign in the user with this external login provider if the user already has a login
var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = false });
case SignInStatus.Failure:
default:
// If the user does not have an account, then prompt the user to create an account
ViewBag.ReturnUrl = returnUrl;
ViewBag.LoginProvider = loginInfo.Login.LoginProvider;
return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel { Email = loginInfo.Email });
}
}
इस कोड को अमेरिकन प्लान प्रवेश पृष्ठ पता चलता है और अमेरिकन प्लान साख का ख्याल रखना होगा। यह सब ठीक काम करता है। लेकिन फिर, यह लाइन निष्पादित की गई है: var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);
। मैं loginInfo
में देख सकता हूं कि एक नाम सेट है, लेकिन result
variabel Failure
पर सेट है। ऐसा क्यों है? उपयोगकर्ता को अभी एफबी द्वारा प्रमाणीकृत किया गया है, तो मूल्य false
क्यों है?
लेकिन फिर, मेरी भावना के लिए यह वीडर हो जाता है। जब मैं नमूना आवेदन जारी रखना जारी रखता हूं, तो यह मुझे एक ई-मेल पता दर्ज करने के लिए कहता है। मैं एक ई-मेल पता और वॉयला दर्ज करता हूं, मैं लॉग इन हूं। चूंकि मैं इस पूरी लॉगिन चीज़ की खोज कर रहा हूं, इसलिए मैं लॉग ऑफ करता हूं और मैं फिर से लॉग इन करना चाहता हूं। इसलिए, मैं लॉग इन करता हूं और तुरंत एफबी का उपयोग करके फिर से लॉग इन करता हूं। और यहां वह जगह है जहां मैंने दीवार के खिलाफ अपना सिर धक्का दिया। जब कोड इस लाइन को फिर से हिट करता है: var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);
परिणाम true
पर सेट है !!
क्या कोई मुझे बता सकता है कि यहां क्या हो रहा है ??
धन्यवाद। मुझे वह हिस्सा कहां मिल सकता है जहां साइनइन प्रबंधक जांचता है कि कोई रिकॉर्ड मौजूद है या नहीं? यह एक तरह का जादुई लगता है। – Martijn
इसे इस वेबसाइट पर मिला: https://www.symbolsource.org/MyGet/Metadata/aspnetwebstacknightly/Project/Microsoft.AspNet.Identity.Owin/2.2.0-alpha1-140725/Release/Default/Microsoft.AspNet.Identity .Owin/Microsoft.AspNet.Identity.Owin/SignInManager.cs? ImageName = Microsoft.AspNet.Identity.Owin। –
हां, स्रोत को देखने के बाद, मुझे विश्वास है कि साइनइनस्टैटस। विफलता का नाम केवल भ्रमित करने के लिए रखा गया है। SignInManager.ExternalSignInAsync() को कॉल करने में, मेरा मानना है कि इसे केवल उपयोगकर्ता के लिए वापस नहीं किया जा सकता है। इसे अन्य कॉलों में अन्य प्रकार की विफलताओं के लिए वापस किया जा सकता है। – mheyman