2013-10-08 2 views
0

У меня есть веб-сайт ASP.Net MVC 4. Когда я запустил этот сайт, у меня не было никакого опыта работы с веб-программированием, и я не верю, что я правильно его настроил.Предотвращение доступа к странице на основе аутентификации

У меня есть страницы, такие как дома, Логин, Register, который я считаю общественности, страницы, как, VerifyPIN и AccountCreated, которые я считаю внутренние и страницы, такие как панель управления и профиля, которые являются частными.

Я чувствую публичные страницы должны быть доступны анонимными пользователями, но Логин и регистрация не должен быть доступны как только пользователем в.

Внутренних страниц я хочу быть доступны только на сервере редирект и никогда не через браузер, aka Я не хочу, чтобы пользователь мог набирать текст на www.MySite.com/AccountCreated.

И частные страницы предназначены только для зарегистрированных пользователей.

У меня есть личные страницы, работающие нормально, но я не знаю, как ограничить доступ к другим страницам, как описано выше. Возможно, мое представление о том, чтобы не разрешить зарегистрированному пользователю доступ к странице входа в систему, не найден.

Мой сайт относительно невелик из-за характера ajax сайта. Я использую [AllowAnonymous] на всех общедоступных страницах, но затем зарегистрированный пользователь все равно может получить к ним доступ, и я не уверен, как это предотвратить.

Мои вопросы,

Как я могу запретить пользователю доступ к странице с помощью адресной строки (www.MySite.com/AccountCreated)

Как я могу предотвратить доступ к [ AllowAnonymous] страница один раз пользователь вошел в систему.

EDIT

Нормально ли предотвратить доступ пользователей к определенным анонимным страницам, например, вход в систему?

+0

Каков сценарий использования AccountCreated, является ли это действием или просто методом на контроллере? – Bond

+0

Его действия. Это страница, которая отображается после успешной регистрации, информируя пользователя о отправляемом электронном письме для проверки новой учетной записи. – Zholen

ответ

3

Вы всегда можете проверить, если пользователь уже зарегистрирован в случае, если он сделал, он будет перенаправлен на другую страницу:.

public ActionResult AccountCreated(some params) 
{ 
      if (Request.IsAuthenticated) 
      { 
       return RedirectToAction("Index") 
      } 
      else 
      { 
       // login logic here 
       } 
} 

Вы также можете проверить его прямо в:

@if (Request.IsAuthenticated) 
{ 
    <span> You are already logged in</span> 
} 
else 
{ 
    //Login form here 
} 
1

ну для вашего первого вопроса вы можете использовать фильтр действий [Авторизовать].

Для вашего другого вопроса, я думаю, вам придется написать свою собственную реализацию. Вам нужно будет создать новый IAuthorizationFilter и использовать его вместо [AllowAnonymous]

1

Только некоторые идеи (на самом деле их не пытались).

  • На вопрос - если AccountCreated это действие, которое означает, что форма регистрации фактически сообщений для этого URL - т.е. Он доступен снаружи.Я предлагаю вам применить атрибут HttpPost к нему так он будет обрабатывать только POST запросы - там не так много вы можете сделать здесь
  • Для точки два вы можете сделать что-то подобное в вашем методе действия
if (HttpContext.User.Identity.IsAuthenticated) 
      { 
       return RedirectToAction("Index", "Home"); 
      } 
else return View(); 
0

Просто подумайте, выйдите из системы, если пользователь перейдет на страницу Login или Register. Надеюсь, что вы не предоставили никакой ссылки на частные страницы для пользователя, чтобы перейти к login или Register страницу или проверить, если пользователь аутентифицирован переадресовать его на Home странице, честно говоря, вы не можете остановить пользователю написать URL и нажав кнопку enter , или просто сообщите, что You'll be logged out if you proceed to whatever page.

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