除了已在AccountController.cs文件中生成的內容之外,我無法使WebSecurity對象在任何地方工作。帳戶控制器在頂部設置了[InitializeSimpleMembership]
屬性。例如,登錄功能不會抱怨呼叫WebSecurity.Login(...)
。我添加了一個子動作的AccountController:在調用「WebSecurity」類的任何其他方法之前,必須先調用「WebSecurity.InitializeDatabaseConnection」方法。
[ChildActionOnly]
[AllowAnonymous]
public ActionResult NavBar()
{
NavBarViewModel viewModel = new NavBarViewModel();
viewModel.LinkItems = new List<NavBarLinkItem>();
if (Request.IsAuthenticated)
{
SimpleRoleProvider roleProvider = new SimpleRoleProvider();
if (roleProvider.IsUserInRole(User.Identity.Name, "User"))
{
viewModel.LinkItems.Add(new NavBarLinkItem()
{ Title = "Create Project", Action = "Create", Controller = "Project" });
}
}
viewModel.LinkItems.Add(new NavBarLinkItem() { Title="Help", Action="Index", Controller="Help" });
return PartialView("_NavBar", viewModel);
}
保持原樣,對「如果(roleProvider.IsUserInRole(User.Identity.Name,‘用戶’))」與主題錯誤消息線路的代碼崩潰。所以,我進入InitialzeSimpleMembershipAttribute.cs文件和複製/粘貼此行我的函數的頂部:
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
...和獲取WebSecurity.InitializeDatabaseConnection應該只被調用一次錯誤消息。這是有道理的,因爲在控制器定義的頂部有一個屬性應該已經調用了這個函數(它看起來確實很好)。所以爲了安全起見,我改變上述呼籲:
if (!WebSecurity.Initialized)
{
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId",
"UserName", autoCreateTables: true);
}
...,回到原來的錯誤信息,即WebSecurity.InitializeDatabaseConnection應該等等等等之前被調用。任何洞察到這個瘋狂將不勝感激
這實際上並不像它需要的那樣清晰。我查看了鏈接,但與我在做什麼(我認爲?)無關,因爲我不想創建角色。 我有同樣的問題,我得到一個「不能調用這個兩次」的消息,但是當我把「第二個」一個,我得到「你必須調用...」的消息。什麼是「你必須調用...」的消息崩潰是: if(OAuthWebSecurity.Login(result.Provider,result.ProviderUserId,createPersistentCookie:false)) 任何想法? –