Аутентификация форм - отображение информации о пользователях, вошедших в систему, в FormView с использованием источника данных объекта. - PullRequest
0 голосов
/ 25 октября 2009

В своем веб-приложении я использую проверку подлинности с помощью cookie-файлов. На странице я хочу отобразить информацию для текущего пользователя, вошедшего в систему, внутри FormView, работающего на ObjectDataSource. Мой источник данных имеет метод выбора, принимающий в качестве параметра имя пользователя, с помощью которого пользовательские данные будут запрашиваться из базы данных. Как получить имя пользователя для текущего пользователя, вошедшего в систему, и использовать его в качестве параметра выбора для источника данных.

Ответы [ 2 ]

1 голос
/ 25 октября 2009

На 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 позволяет вам написать класс слоя доступа к данным и сопоставить некоторые методы этого класса с операциями источника данных. Вы можете получить доступ к HttpContext.Current.User из этих методов.

Как вы сказали, вы "В моем веб-приложении я использую проверку подлинности с помощью cookie с помощью форм". Я предполагаю, что вы знаете, как «войти» в систему и отправить куки в браузер. Если у вас есть какие-либо проблемы с этим, дайте мне знать.

0 голосов
/ 29 октября 2009

Вместо этого я решил использовать событие Selecting источника данных и добавить необходимую информацию в качестве inputParameter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...