2015-05-10 7 views
0

Я создал собственный поставщик роли. Прежде чем я обновил свои пакеты VS и NuGet, все, казалось, сработало. Однако, когда я вхожу в систему сейчас, похоже, что страницы обновляются (или View перезагружается по крайней мере). Я вижу, что cookie создан, но я не буду перенаправлять на Index. Зачем?Поставщик пользовательской роли не работает - мгновенное перенаправление на страницу входа в систему после входа в систему

В моей Web.Config:

<authentication mode="Forms"> 
     <forms loginUrl="~/Home/Login" timeout="2880" /> 
    </authentication> 
<roleManager defaultProvider="MyRoleProvider"> 
     <providers> 
     <add name="MyRoleProvider" type="project.Authorisation.CustomRoleProvider" /> 
     <remove name="MySQLRoleProvider" /> 
     <add name="MySQLRoleProvider" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, Version=6.9.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" applicationName="/" /> 
     </providers> 
    </roleManager> 

В моей HomeController:

public ActionResult Login() 
    { 
     return View(); 
    } 
    [HttpPost] 
    public ActionResult Login(User user) 
    { 
     if (ModelState.IsValid) 
     { 
      bool authenticated = userDBController.isAuthorized(user.Nickname, user.Password); 

      if (authenticated) 
      { 
        FormsAuthentication.SetAuthCookie(user.Nickname, false); 
        return Redirect(Url.Action("Index", "Home")); 
      } 
      else 
      { 
       ViewBag.Message = "Inlog data is incorrect!"; 
       return View(); 
      } 
     } 
     else 
     { 
      return View(); 
     } 
    } 
    [Authorize(Roles = "ADMIN")] 
    public ActionResult Index() 
    { 
     return View(); 
    } 

Так что, когда я вошел в я не могу перейти на главную/Index, он будет перенаправлять меня Вход в любом случае. . То же самое для после входа в

Мой заказ RoleProvider довольно просто прямо сейчас:

public class CustomRoleProvider : RoleProvider 
{ 
    private MainController mainController = MainController.Instance; 
    private UserDBController userDBController = MainController.Instance.GetUserDBController(); 

public override string[] GetRolesForUser(string username) 
{ 
    return userDBController.getRollen(username); 
} 

Прежде всего, это все работало (и разрешения).

+0

Убедитесь, что подключенный пользователь имеет роль администратора. – CodeNotFound

+0

Пользователь, с которым я вхожу в систему, имеет роль администратора. Однако, если я поставил точку останова в функции GetRoleForUser, она не попадет туда. – Kraishan

ответ

0

Ну, я, наконец, узнал, в чем проблема!

После того как вы переустановили пакеты и что не изменилось, изменился мой web.config. Все, что мне нужно было сделать, это добавить enabled = "true" в раздел roleManager. Поэтому код должен выглядеть так:

<roleManager defaultProvider="MyRoleProvider" enabled="true"> 
    <providers> 
    <add name="MyRoleProvider" type="project.Authorisation.CustomRoleProvider" /> 
    </providers> 
</roleManager> 

Таким образом, ролевой менеджер отключен. Надеюсь, это поможет другим людям, которые могут столкнуться с этой проблемой!

Смежные вопросы