Аутентификация форм - отображение информации о пользователях, вошедших в систему, в FormView с использованием источника данных объекта.
-
06-07-2019 - |
Вопрос
В своем веб-приложении я использую проверку подлинности с помощью cookie-файлов. На странице я хочу отобразить информацию для текущего пользователя, вошедшего в систему, внутри FormView, работающего на ObjectDataSource. Мой источник данных имеет метод выбора, принимающий в качестве параметра имя пользователя, с помощью которого пользовательские данные будут запрашиваться из базы данных. Как получить имя пользователя для текущего пользователя, вошедшего в систему, и использовать его в качестве параметра выбора для источника данных.
Решение 2
Вместо этого я решил использовать событие Selecting источника данных и добавить необходимую информацию в качестве inputParameter.
Другие советы
На Global.asax .. вы должны написать:
protected void Application_AuthenticateRequest(object sender, EventArgs e) {
if (Request.PhysicalPath.EndsWith(".aspx") || Request.PhysicalPath.EndsWith(".axd"))
SecurityManager.SetPrincipal();
}
Метод SecurityManager.SetPrincipal () должен выглядеть следующим образом:
// variable we'll use to set HttpContext.Current.User
IPrincipal principal = null;
FormsIdentity identity;
//IsAuthenticated will be automatically set by .NET framework
if (HttpContext.Current.Request.IsAuthenticated)
{
// (FormsIdentity)HttpContext.Current.User.Identity will
// be filled automatically by the .NET framework when using forms authentication
identity = (FormsIdentity)HttpContext.Current.User.Identity;
// This User class must be defined BY YOU
User userProfile;
// this user data is the data that you entered when you created the ticket.
// this should be a security token that would allow you to GET THE USER FROM IT
String userData = (((FormsIdentity)identity).Ticket).UserData;
try
{
// UserHelper is a class that must be able to OBTAIN a USER given a SECURITY TOKEN.
// remember, you created this token when you created the ticket you used in the cookie.
userProfile = UserHelper.GetUser(userData);
// AuthenticatedPrincipal must implement IPrincipal. Consider deriving from GenericPrincipal.
// Your IPrincipal implementations must hold a reference to the UserClass you created
principal = new AuthenticatedPrincipal(identity, userProfile);
}
catch
{
FormsAuthentication.SignOut();
// This is analogous to AuthenticatedPrincipal
principal = new AnonymousPrincipal(new GuestIdentity(), UserHelper.GetUser(null));
}
}
else
{
principal = new AnonymousPrincipal(new GuestIdentity(), UserHelper.GetUser(null));
}
// Now we make our principal, that holds a reference to the currently
// logged user, globally visible
HttpContext.Current.User = principal;
Насколько я знаю, ObjectDataSource позволяет вам написать класс уровня доступа к данным и сопоставить некоторые методы этого класса с операциями DataSource. Вы можете получить доступ к HttpContext.Current.User из этих методов.
Как вы уже сказали, в моем веб-приложении я использую проверку подлинности с помощью cookie-файлов с помощью форм. Я предполагаю, что вы знаете, как "войти" пользователь и отправить куки в браузер. Если у вас есть какие-либо проблемы с этим, дайте мне знать.