Перед входом в систему необходимо дважды ввести учетные данные - MVC3 - PullRequest
0 голосов
/ 23 июля 2011

Я занимаюсь разработкой приложения ASP.NET MVC 3 и использую проверку подлинности с помощью форм для обработки всех функций входа в систему. Я создал 3 роли пользователя - «Менеджер», «Клиенты» и «Репетиторы», и пользователи будут перенаправлены на разные точки зрения в зависимости от их роли. Мой логин работал нормально, прежде чем я закодировал роли. Вот код из моего контроллера:

 public class AccountController : Controller
{

    //
    // GET: /Account/LogOn

    public ActionResult LogOn()
    {
        return View();
    }


    [Authorize(Roles="Manager")]
    public ActionResult Index()
    {
        return View();
    }

    [Authorize(Roles = "Tutors")]
    public ActionResult TutorMain()
    {
        return View();
    }

    [Authorize(Roles = "Clients")]
    public ActionResult ClientMain()
    {
        return View();
    }

    //
    // POST: /Account/LogOn

    [HttpPost]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            if (Membership.ValidateUser(model.UserName, model.Password))
            {
                FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                    && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
                {
                    return Redirect(returnUrl);
                }
                else
                {
                    if (User.IsInRole("Manager"))
                    return RedirectToAction("Index", "Account");

                    if (User.IsInRole("Tutors"))
                    return RedirectToAction("TutorMain", "Account");

                    if (User.IsInRole("Clients"))
                    return RedirectToAction("ClientMain", "Account");
                }
            }
            else
            {
                ModelState.AddModelError("", "The user name or password provided is incorrect.");
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

Пожалуйста, помогите мне выяснить, почему это происходит.

Спасибо, Amy

1 Ответ

0 голосов
/ 23 июля 2011

Убедитесь, что ваш логин является участником всех соответствующих ролей .... т. Е. Если вы являетесь только участником "Менеджера", то вам снова будет предложено, если вы попытаетесь просмотреть TutorMain (), для которого требуется "Tutors" "Роль.

Вы можете указать несколько ролей для каждого контроллера следующим образом:

[Authorize(Roles="Manager")]
public ActionResult Index()
{
...
}

[Authorize(Roles = "Manager, Tutors")]
public ActionResult TutorMain()
{
        return View();
}

Если это становится утомительным, то исследуйте «пользовательские» атрибуты Authorize - как описано в asp.net mvc Добавление к атрибуту AUTHORIZE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...