2012-02-02 53 views
3

我有一個運行MVC 3(Razor)應用程序與表單身份驗證。我可以在部分視圖中輕鬆調用@ User.Identety.Name,它將返回登錄用戶的名稱。但是,如果我叫User.Identety.Name在控制它返回null ...MVC 3表單身份驗證User.Identity.Name返回false

,如果我嘗試檢查(User.Identity.IsAuthenticated),它總是返回空...

我現在很困惑。 ..

登錄時,我調用登錄方法,該方法調用SignIn方法,我在其中設置身份驗證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

好看起來像我發現這個問題!

如果我在ActionResult方法中調用User.Identety.Name,它將返回沒有問題的用戶名。但如果我在Upload方法中調用它返回字符串,它搞砸了!

<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 
    }); 
} 

);

回答

3

它看起來像你使用一些客戶端文件上傳組件。如果這個組件使用Flash,很可能Cookie不會與請求一起發送。您可以查看following blog post,其中說明了如何發送身份驗證cookie值作爲參數,並在服務器上重新構建令牌。這是一個similar story