मैं उनकी भूमिका के आधार पर पृष्ठ के लिए उपयोगकर्ता अनुप्रेषित कोशिश कर रहा हूँ,ASP.NET MVC 5 पहचान 2 लॉग इन रीडायरेक्ट
यह है कि ASP.NET MVC 5 के साथ आते लॉगिन समारोह के डिफ़ॉल्ट कार्यान्वयन है :,
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindAsync(model.UserName, model.Password);
if (user != null)
{
await SignInAsync(user, model.RememberMe);
//role Employer go to Employer page
if (UserManager.IsInRole(user.Id, "Employer"))
{
return RedirectToAction("Index", "Employer");
}
//role Admin go to Admin page
else if (UserManager.IsInRole(user.Id, "Admin"))
{
return RedirectToAction("Index", "Admin");
}
else
{
//no role
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
लेकिन वहाँ एक समस्या है, हालांकि साइट th करने के लिए मुझे पुनः निर्देशित किया जाता है:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindAsync(model.UserName, model.Password);
if (user != null)
{
await SignInAsync(user, model.RememberMe);
return RedirectToLocal(returnUrl);
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
private ActionResult RedirectToLocal(string returnUrl)
{
if (Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Employer");
}
}
मैं उनकी भूमिका के आधार पर उपयोगकर्ता रीडायरेक्ट करने के लिए सक्षम होना चाहते हैं, मैं इसे इस तरह से करने की कोशिश की ई सही पृष्ठ, अगर मैं url foo.com/admin में टाइप करके नेविगेट करता हूं, जब मैं किसी व्यवस्थापक खाते से लॉग इन नहीं करता हूं, तो साइट मुझे url foo.com/Account/Login?ReturnUrl=%2Fadmin के साथ लॉगिन पृष्ठ पर लाती है , जो अपेक्षित व्यवहार है।
अगर मैं इस समय नियोक्ता खाते से लॉगिन करता हूं, तो यह मुझे नियोक्ता के पृष्ठ पर रीडायरेक्ट करेगा और मुझे नियोक्ता के रूप में लॉग इन करेगा, जो गलत नहीं है, लेकिन यह मामला नहीं होना चाहिए, साइट का उल्लेख होना चाहिए मुझे इसके बजाय एक व्यवस्थापक खाते से लॉगिन करना चाहिए क्योंकि वापसी यूआरएल "व्यवस्थापक" है। मुझे आशा है कि मैं समझ में आ रहा हूं।
हाय, आप कृपया व्याख्या कर सकते हैं क्यों किसी और बयान RedirectToLocal (returnUrl) वापसी; जरूरत है? – Mindless
क्या मैं अभी रीडायरेक्ट (returnUrl) कर सकता हूं और RedirectToLocal एक्शन विधि को हटा सकता हूं? – Mindless
आपको जांच के कारण की आवश्यकता है अगर (यूआरएल।IsLocalUrl (returnUrl)) – tmg