Проверка подлинности с помощью форм MVC 3 User.Identity.Name возвращает false - PullRequest
3 голосов
/ 02 февраля 2012

У меня запущено приложение MVC 3 (Razor) с проверкой подлинности с помощью форм. Я могу легко назвать @ User.Identety.Name в частичном представлении, которое вернет имя вошедшего в систему пользователя. Но если я вызываю User.Identety.Name в контроллере, он возвращает нуль ...

Если я попробую проверить, если (User.Identity.IsAuthenticated) он всегда возвращает ноль ...

Я сейчас в замешательстве ...

При входе в систему я вызываю метод входа в систему, который вызывает метод входа в систему, где я устанавливаю cookie-файл аутентификации, который в теории должен содержать все данные, которые мне нужно получить.

Что я делаю не так?

  [HttpPost]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            if (MembershipService.ValidateUser(model.UserName, model.Password))
            {
                FormsService.SignIn(model.UserName, true);


                if (!String.IsNullOrEmpty(returnUrl))
                {
                    return Redirect(returnUrl);
                }
                else
                {
                    return RedirectToAction("Index", "Home");
                }
            }
            else
            {
                ModelState.AddModelError("", "Brugernavn eller kodeordet er forkert!");
            }
        }

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


 public void SignIn(string userName, bool createPersistentCookie)
        {
            if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Value cannot be null or empty.", "userName");

            FormsAuthentication.SetAuthCookie(userName, true);

        }



  //Upload method is in an Employee Controller.

    public string Upload(HttpPostedFileBase fileData)
    {

        if (User.Identity.IsAuthenticated)
        {
            var fileName =
                this.Server.MapPath("~/uploads/" + HttpContext.User.Identity.Name + "/" +
                                    System.IO.Path.GetFileName(fileData.FileName));
            fileData.SaveAs(fileName);
        }
        return "ok";
    }

UPDATE

Хорошо, похоже, я нашел проблему!

Если я вызываю User.Identety.Name в методе ActionResult, он возвращает имя пользователя без проблем. но если я вызову его в методе Upload, который возвращает String, это испортит!

    <script type="text/javascript">
        $(window).load(
function () {
    $("#fileuploader").fileUpload({
        'uploader': '/Scripts/uploader.swf',
        'cancelImg': '/Images/cancel.png',
        'buttonText': 'Vælg StykListe CSV Fil',
        'script': '@Url.Action("Upload","Solar")',
        'folder': '/uploads',
        'fileDesc': 'Image Files',
        'fileExt': '*.jpg;*.jpeg;*.gif;*.png;*.csv',
        'multi': true,
        'auto': true
    });
}

);

1 Ответ

3 голосов
/ 02 февраля 2012

Похоже, вы используете какой-то клиентский компонент для загрузки файлов. Если этот компонент использует Flash, вполне возможно, что куки не отправляются с запросом. Вы можете взглянуть на следующую запись в блоге , которая иллюстрирует, как вы можете отправить значение cookie аутентификации в качестве параметра и на сервере восстановить токен. А вот похожая история .

...