Добавление [Authorize] в контроллер привело к ошибке 401.0 - PullRequest
0 голосов
/ 27 октября 2019

Я делаю простой пользовательский веб-проект регистрации. Всякий раз, когда я добавляю [Authorize] в контроллер и впоследствии создаю из него представление, при запуске кода он выдает HTTPS 401.0 Unauthorized Error. Если я удалил его, он запускается, но не дает желаемого результата.

В моем Account Controller у меня было следующее:

        [HttpPost]
        public ActionResult SignUp(UserSignUpView USV)
        {
            if (ModelState.IsValid)
            {
                UserManager UM = new UserManager();
                if (!UM.IsLoginNameExist(USV.LoginName))
                {
                    UM.AddUserAccount(USV);
                    FormsAuthentication.SetAuthCookie(USV.FirstName, false);
                    return RedirectToAction("Welcome", "Home");

                }
                else ModelState.AddModelError("", "Login Name already taken.");
            }
            return View();
        }

В моем Home контроллере яимел это:


namespace MVC5FileRealWorld.Controllers
{
    public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index()
        {
            return View();
        }

        [Authorize]
        public ActionResult Welcome()
        {
            return View();
        }
    }
}

Я создал представление, добавив представление правой кнопкой мыши на Welcome()

Ниже мой класс Welcome:

@{
    ViewBag.Title = "Welcome";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Hi <b>@Context.User.Identity.Name</b>! Welcome to my first MVC 5 Web App!</h2>

Послепользователь успешно зарегистрирован (т.е. данные успешно сохранены в базе данных),

Должно отобразиться «Привет XXX! Добро пожаловать в мое первое веб-приложение MVC5! '

Но теперь, если я добавил [Authorize] и сгенерировал представление, он просто отобразит ошибку HTTP 401.0. Если я удалю [Authorize] и восстановлю другой вид (с тем же именем, что и у предыдущего), он просто отобразит «Привет! Добро пожаловать в мое первое веб-приложение MVC5! Эта строка кода @Context.User.Identity.Name просто не работает и для последнего случая.

1 Ответ

1 голос
/ 27 октября 2019

Вы получаете 401, когда вы не авторизованы при попытке доступа к «защищенному» ресурсу.

Если вы не авторизованы: @Context.User.Identity.Name вернет пустую строку.

Пока что это то, что вы испытываете.

Вы показываете код "SignUp", который создает cookie аутентификации, который должен авторизовать пользователя. Рядом с этим;у вас должна быть форма входа в систему, в которую пользователь может войти.

Итак, войдите с существующим пользователем или зарегистрируйтесь с новым. Если cookie сохраняется, вы авторизуетесь.

Если это не работает;скорее всего, ваш конвейер авторизации / аутентификации настроен неправильно.

В качестве последнего средства вы можете попробовать:

FormsAuthentication.SetAuthCookie(USV.FirstName, true);

или, может быть, вам нужно проверить web.config

<authentication mode="Forms">
    <forms loginUrl="..." cookieless="UseCookies" />
</authentication>

<!-- more stuff -->

<modules>
   <!-- removed module -->
   <!--<remove name="FormsAuthenticationModule" />-->
</modules>

, см. FormsAuthentication.SetAuthCookie не[Авторизоваться] в MVC 5

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