2015-05-14 31 views
1

根據this article和與本教程相關的github中的源代碼,我試圖實現一個mvc應用程序,其中用戶擁有單獨的資源。User.Identity.GetUserId()返回null

我有我的控制器的授權屬性,如果我沒有登錄,我將被重定向到登錄頁面。我可以在頁面的頂部看到我的用戶名,所以我認爲事情沒有問題。但後來我嘗試在另一個控制器上創建一個動作,並發現currentUser爲空。

這似乎發生在一個隨機的方式,這使得它非常沮喪。但最近才失敗。

它可能是創建數據庫的東西嗎?我使用Code First。

[Authorize] 
public class ShopsController : Controller 
{ 
    private ApplicationDbContext db; 
    private UserManager<ApplicationUser> manager; 

    public ShopsController() 
    { 
     db = new ApplicationDbContext(); 
     manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db)); 

    } 


    // GET: Shops 
    public ActionResult Index() 
    { 
     var currentUser = manager.FindById(User.Identity.GetUserId()); 
     var shops = db.Shops.ToList().Where(shop => shop.Owner.Id == currentUser.Id); 
     return View(shops); 
    } 
+0

嗯我不知道你的模型是不同步的數據庫。當你更新實體模型時你會得到這個嗎? – heymega

+1

另外,如果你只打算在下一個查詢中使用ID,爲什麼要調用manager.FindById並返回用戶實體?似乎毫無意義的數據庫調用... – heymega

+0

我通常可以通過確保我註銷,關閉解決方案,刪除數據庫來工作。我發現我每次都在initiliazer中刪除數據庫。這我改爲DropCreateDatabaseIfModelChanges。關於其他評論,沒有想過,只是使用示例代碼,讓事情發揮作用,然後希望理解它。 – Jepzen

回答

1

試試這個代碼(注:中投是string):

User.Identity.GetUserId<string>() 

由於數據庫我的ID列是編號爲nvarchar(128),NOT NULL沒有投我收到了空,但之後,它給了我期望的GUID