2015-10-27 3 views
1

У меня есть действия контроллера, которые имеют AuthorizeAttribute на нихAuthorizeAttribute, во всяком случае проверки заранее, если это будет проходить

Часто кто-то попытается старый URL, который будет принимать их (проверки подлинности форм) на страницу входа в систему, а затем редирект url, но может быть по какой-то причине, что им больше не разрешен доступ к этой странице

Есть ли способ проверить URL-адрес перед перенаправлением?

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

(дополнительная информация)

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

Таким образом мы получаем

  1. они пытаются получить доступ к URL

  2. проверки подлинности форм говорит, что они не имеют доступа и перенаправляет на страницу входа

  3. они входа в систему, однако они по-прежнему не имеют доступа к этой странице, и они снова перенаправляются на страницу входа в систему.
+0

Я не понимаю. Если у них нет доступа к странице, то (1) это 404 или (2) у них нет достаточных прав на доступ к ней ... Итак, в случае 1 достаточно 404. В случае 2, не все работает так, как ожидается? Пользователь не имеет права посещать страницу => дать им возможность войти в систему как пользователь, обладающий достаточными правами. Что я упустил? – spender

+0

Отметьте свои старые URL-адреса (действия контроллера) атрибутом '[NoAction]' https://msdn.microsoft.com/en-us/library/system.web.mvc.nonactionattribute(v=vs.118).aspx, поэтому если будет пытаться получить доступ к ошибке 404. –

+0

Я не уверен на 100%, что вы хотите сделать, но что бы это ни было, я уверен, что это можно сделать с помощью [Custom Authorize Attribute] (http://stackoverflow.com/search?q=Custom+Authorize + Атрибут) – markpsmith

ответ

0

При проверке подлинности формы, пожалуйста, убедитесь, что вы установили аутентификации куки на странице входа в систему после проверки пользователя:

FormsAuthentication.SetAuthCookie(userId, rememberMe); 

Это аутентификации пользователя в целях предотвращения перенаправления на Logon страницу.

Вы также можете проверить, имеет ли пользователь был удостоверен:

if (HttpContext.Current.User.Identity.IsAuthenticated) 
{ 
    var loggedOnUserId = HttpContext.Current.User.Identity.Name; 
} 
+0

Пользователь аутентифицирован, но затем перенаправляется на предыдущую страницу, так как теперь пользователь может получить доступ. Однако, если он этого не сделает, он перенаправит обратно на вход в систему. – tony

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