2013-11-23 3 views
1

Заглавие говорит все, я хочу, чтобы это было так, если пользователь пытается перейти на любую страницу или получить доступ к чему-либо на веб-сайте для перенаправления на страницу входа в систему, только если он не вошел в систему.Как перенаправить пользователя на определенную страницу на веб-сайте, если он не вошел в систему?

Это мой простой код Логин:

public ActionResult login(MvcMobile.Models.Users x) 
    { 
     var user = db.Users.FirstOrDefault(u => u.username == x.username && u.password == x.password); 


    if (user == null) 
     ModelState.AddModelError("","username or password is wrong."); 

    else 
    { 
     FormsAuthentication.SetAuthCookie(user.username, false); 
     Response.Redirect("/"); 
    } 
    return View(user); 
} 

я попытался поместить этот код в основной раскладке, но я получил бесконечный цикл перенаправления: P

@if (User.Identity.IsAuthenticated) 
        { 
      <p> Hi @User.Identity.Name</p> 
        } 
        else 
         { 

         Response.Redirect("~/home/login"); 
        } 

любая идея?

+0

Я отредактировал ваше название. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

ответ

7

Украсьте свои контроллеры/действия атрибутом [Authorize]. Или, если вы хотите, чтобы это применить ко всем контроллерам добавить его в качестве глобального фильтра действия:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new AuthorizeAttribute()); 
} 

Конечно, делая это, вы можете исключить свой AccountController от аутентификации, украшая его с [AllowAnonymous] атрибута:

Затем в web.config, установите loginUrl страницы вашей формы тега аутентификации, чтобы указать на страницу входа в систему, где все анонимные пользователи будут перенаправлены:

<authentication mode="Forms"> 
    <forms loginUrl="~/home/login" /> 
</authentication> 
+0

Спасибо, но я все еще перенаправлен на URL-адрес для входа по умолчанию, и всякий раз, когда я запускаю приложение, я получаю сообщение об ошибке в строке «« ошибка говорит «Аутентификация без узнаваемой конфигурации». , Есть идеи ? – user2962142

+0

Где вы разместили этот раздел? Вы поместили его в узел ''? Пожалуйста, прочитайте следующую статью, чтобы лучше ознакомиться с тем, как работает функция проверки подлинности в ASP.NET: http://msdn.microsoft.com/en-us/library/ff647070.aspx –

+0

Я просто переместил ее туда, и я получил эту ошибку: «Ошибка использования раздела, зарегистрированного как allowDefinition =« MachineToApplication », за пределами уровня приложения. Эта ошибка может быть вызвана тем, что виртуальный каталог не настроен как приложение в IIS». – user2962142

1

в дополнение к Darin Dimitrov's answer , вы также должны настроить атрибут LoginUrl в файле Web.config, например:

<authentication mode="Forms"> 
    <forms loginUrl="member_login.aspx" 
    defaultUrl="index.aspx" /> 
</authentication> 
+1

Как это отличается от ответа Дарина? –

+1

На самом деле Дарин Димитров отредактировал и добавил конфигурационную часть позже :-) – afzalulh

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

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