Nie mogę spowodować, aby obiekt WebSecurity działał w dowolnym miejscu z wyjątkiem tego, co zostało już wygenerowane w pliku AccountController.cs. Konto administratora ma ustawiony atrybut [InitializeSimpleMembership]
u góry. Funkcje logowania nie narzekają na przykład na wywoływanie WebSecurity.Login(...)
. Dodałem działanie dziecko do AccountController:Musisz wywołać metodę "WebSecurity.InitializeDatabaseConnection" przed wywołaniem jakiejkolwiek innej metody z klasy "WebSecurity"
[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);
}
Lewy jak jest, wywala kod na "if (roleProvider.IsUserInRole (User.Identity.Name, "User"))" Zgodnie z komunikatem o błędzie przedmiotem. Więc idę do pliku InitialzeSimpleMembershipAttribute.cs i kopiuj/wklej tę linię na szczycie mojej funkcji:
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
... i pojawia się komunikat o błędzie, który WebSecurity.InitializeDatabaseConnection powinna być wywoływana tylko raz. Ma to sens, ponieważ na górze definicji kontrolera znajduje się atrybut, który powinien już wywoływać tę funkcję (i wygląda na to, że tak jest dobrze). Więc pewności, zmieniam powyżej zaproszenia do:
if (!WebSecurity.Initialized)
{
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId",
"UserName", autoCreateTables: true);
}
... i odzyskać oryginalny komunikat o błędzie, że WebSecurity.InitializeDatabaseConnection powinna zostać wywołana przed bla bla bla. Każdy wgląd w to szaleństwo byłby bardzo mile widziany
To naprawdę nie jest tak jasne, jak być może musi. Spojrzałem na link, ale nie ma to związku z tym, co robię (chyba?), Ponieważ nie próbuję utworzyć roli. Mam ten sam problem co ja, dostaję komunikat "nie mogę połączyć się z tym dwa razy", ale kiedy biorę "drugi", otrzymuję komunikat "musisz zadzwonić ...". Przyczyną awarii z komunikatem "musisz zadzwonić ..." jest: , jeśli (OAuthWebSecurity.Login (result.Provider, result.ProviderUserId, createPersistentCookie: false)) Jakieś pomysły? –