В настоящее время я работаю над сайтом с MVC5 и Identity.
У меня есть страница, доступная, когда пользователь подключен (с учетной записью), но также и когда нет. Если он подключен, я хочу отобразить некоторую информацию.
Если он не подключен, я хочу отображать меньше информации, и я хочу пригласить его войти в систему.
Я не знаю, как реализовать такую страницу. У меня есть этот контроллер:
[Authorize]
public class PController : Controller
{
private int UserId;
public ActionResult Index(int userId ) {
UserId = Convert.ToInt32(((ClaimsIdentity) User.Identity).FindFirst("test").Value);
PModel model = new PModel(UserId);
return View(model);
}
}
и моя модель:
public class PModel {public int UserId {get; set; задавать; } }
public PModel(int userId) {
........
}
В обоих случаях я хотел бы назвать метод Index и выполнить обработку в соответствии с подключением в модели:
public PModel(int userId) {
if(userConnected) {
} else {
}
}
Я не знаю, возможно ли это.
Вы не делаете этого в своей модели (обычно). Если вы хотите использовать модель проверки подлинности по умолчанию, которая поставляется вместе с ASP.net, вам необходимо настроить ее в своем web.config и предоставить соответствующие действия входа/выхода из системы и т.д. В конфигурации у вас есть что-то вроде этого:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="30" name=".MySite" protection="All"/>
</authentication>
Атрибут Authorize
вашего действия остановит запуск кода внутри этого метода, если пользователь не прошел аутентификацию. Код проверки подлинности форм перенаправляет пользователя на “loginUrl”, указанный в вашем web.config, если они попадают прямо на страницу вашего сайта без входа в систему.
Из вашего комментария я неправильно понял ваш вопрос. Вам необходимо будет удалить атрибут Authorize
, а затем вы можете установить свойство userConnected
модели на userConnected
свойства Request.IsAuthenticated
в контроллере.