मैं एक एपीआई के साथ एक वेबसाइट बना रहा हूं, एपीआई को सत्यापन की आवश्यकता है ताकि उपयोगकर्ता को केवल अपना डेटा प्राप्त हो। मैंने लॉगिन को सत्यापित करने के लिए निम्न मध्यवर्ती लिखा है।। नेट-कोर मिडलवेयर रिटर्न रिक्त परिणाम
public class ApiAuthenticationMiddleware
{
private readonly RequestDelegate _next;
private readonly UserManager<ApplicationUser> _userManager;
private readonly SignInManager<ApplicationUser> _signInManager;
public ApiAuthenticationMiddleware(RequestDelegate next,
SignInManager<ApplicationUser> signInManager,
UserManager<ApplicationUser> usermanager)
{
_next = next;
_signInManager = signInManager;
_userManager = usermanager;
}
public async Task Invoke(HttpContext context)
{
if (!context.Request.Query.ContainsKey("password") || !context.Request.Query.ContainsKey("email"))
{
context.Response.StatusCode = 401; //UnAuthorized
await context.Response.WriteAsync("Invalid User Key");
return;
}
var email = context.Request.Query["email"];
var password = context.Request.Query["password"];
var result = await _signInManager.PasswordSignInAsync(email, password, false, lockoutOnFailure: false);
if (result.Succeeded)
{
await _next.Invoke(context);
}
else if (//some more checks)
context.Response.StatusCode = 401; //UnAuthorized
await context.Response.WriteAsync("Invalid User Key");
return;
}
}
}
क्या मैं चाहते हैं तो उपयोगकर्ता कोई वैध प्रवेश किया है कि एक रिक्त पृष्ठ या की तरह "अमान्य उपयोगकर्ता कुंजी" एक त्रुटि संदेश दिखाई जाती है। हालांकि इस समय क्या होता है होम पेज लौटाया जाता है (क्योंकि मेरा मिडलवेयर usemvc से पहले कहा जाता है और रिटर्न स्टेटमेंट usemvc द्वारा किए गए नियंत्रक अनुरोध को छोड़ देता है)।
startup.cs में कॉन्फ़िगर विधि में मेरे प्रासंगिक कोड
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseIdentity();
app.UseWhen(x => (x.Request.Path.StartsWithSegments("/api", StringComparison.OrdinalIgnoreCase)),
builder =>
{
builder.UseMiddleware<ApiAuthenticationMiddleware>();
});
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
मैं अपने मिडलवेयर स्थिति कोड के साथ एक रिक्त पृष्ठ वापसी कर सकते हैं?
कृपया डाउनवॉटिंग के कारण को समझाएं ताकि मैं प्रश्न सुधार सकूं और जान सकूं कि मैंने क्या गलत किया है।
अद्यतन
चीजों की बहुत कोशिश के बाद मैंने पाया कि जब मैं निकालें:
await context.Response.WriteAsync("Invalid User Key");
:
context.Response.StatusCode = 401; //UnAuthorized
यह काम करता है के रूप में उम्मीद, उपयोगकर्ता संदेश में दिए गए हो जाता है
हाउवर मैं नहीं चाहता कि उपयोगकर्ता लॉग ऑन पर 200 स्टेटसोड प्राप्त करे, लेकिन 401 स्टेटसोडोड विफल हो। लेकिन स्थिति कोड लाइन का उपयोग करते समय उपयोगकर्ता को पुनर्निर्देशित किया जाता है। तो मैं पुनर्निर्देशन के बिना स्टेटसोड कैसे भेज सकता हूं?
क्यों उपयोग नहीं कर 'Authorize' विशेषता – CodeNotFound
अधिकृत मान लिया गया एक उपयोगकर्ता इम एक मोबाइल एप्लिकेशन के लिए एक API बनाने इसलिए ऐप्स जो मान्य उपयोगकर्ता से होने की जरूरत है अनुरोध भेजता में लॉग ऑन है (अगर im सही कुकी के माध्यम से)। यह भी अधिकृत है कि अगर रजिस्टर नहीं किया गया है तो रजिस्टर पेज पर रीडायरेक्ट किया जाएगा जो कि मेरे एपीआई के लिए इच्छित व्यवहार नहीं है। –
मैं ओपनआईडी मिडलवेयर पर एक नज़र डालेगा। यह मिडलवेयर प्राधिकृत विशेषता –