MVC 3 Аутентификация форм User.Identity.Name возвращает false

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

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

Теперь я смущен...

При входе в систему я вызываю метод входа в систему, который вызывает метод входа в систему, в котором я устанавливаю файл 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";
    }

ОБНОВЛЕНИЕ

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

Если я вызываю 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
    });
}

);


person Timsen    schedule 02.02.2012    source источник


Ответы (1)


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

person Darin Dimitrov    schedule 02.02.2012