У нас есть призрак в наших элементах управления членством ASP.Net - PullRequest
1 голос
/ 15 декабря 2010

У нас есть настроенный веб-сайт, который использует 2 разные базы данных.Они настроены так, что теперь, когда вы заходите на сайт www.website.com и входите в систему, после аутентификации у вас будет файл cookie, для которого настроено значение website1ConnectionString.Каждый раз, когда мы вызываем текстовый текст с помощью linq, мы отправляем функциональность, чтобы проверить имя файла cookie и получить соответствующую строку подключения.Пример PortalDataContext db = new PortalDataContext(AuthenticatedUser.ConnectionString); Если пользователь заходит на сайт www.website.com/2ndlogin, он проходит проверку подлинности, и файл cookie устанавливается вместе с файлом website2ConnectionString.Сейчас мы сталкиваемся с проблемой, которая заключается в том, что имя пользователя и guid случайно меняются на других пользователей, что приводит к неверной информации.

Мы заметили это, выписав имя пользователя, связанное с вошедшим в систему пользователем.и навигация по сайту.После некоторого бездействия случайным образом имя пользователя, отображаемое в верхней части каждой страницы, меняется на другого пользователя вместе с GUID.Иногда все меняется обратно, а иногда мы вынуждены выходить из системы и снова входить в нее.

В последнее время случалось так, что у пользователя в database1 было изменено имя пользователя и GUID на пользователя в Database2.

Мы используем класс AuthenticatedUser, который выглядит следующим образом:

public static MembershipUser GetUser()
    {
        string connection = AuthenticatedUser.ConnectionString;
        string provider = "";
        if (connection.Contains("website2"))
        {
            provider = "website2MembershipProvider";
        }
        else
        {
            provider = "AspNetSqlMembershipProvider";
        }

        MembershipProvider prov = Membership.Providers[provider];
        MembershipUser m = prov.GetUser(UserName, true);

        return m;
    }

    public static MembershipProvider GetMembershipProvider()
    {
        string connection = AuthenticatedUser.ConnectionString;
        string provider = "";
        if (connection.Contains("website2"))
        {
            provider = "website2MembershipProvider";
        }
        else
        {
            provider = "AspNetSqlMembershipProvider";
        }

        MembershipProvider prov = Membership.Providers[provider];
        return prov;
    }

    public static Guid LoginUserID
    {
        get
        {
            Guid g = new Guid();

            string connection = AuthenticatedUser.ConnectionString;
            string provider = "";
            if (connection.Contains("website2"))
            {
                provider = "website2MembershipProvider";
            }
            else
            {
                provider = "AspNetSqlMembershipProvider";
            }

            MembershipProvider prov = Membership.Providers[provider];
            MembershipUser m = prov.GetUser(UserName, true);
            if (m != null)
            {
                g = (Guid)m.ProviderUserKey;
            }

            return g;
        }
    }

    private static string _UserName = "";
    public static string UserName
    {
        get
        {
            if (String.IsNullOrEmpty(_UserName))
            {
                if (Membership.GetUser() != null)
                {
                    return Membership.GetUser().UserName;
                }
            }
            else
            {
                return _UserName;
            }

            return "";
        }

        set
        {
            _UserName = value;
        }
    }

public static string ConnectionString
    {
        get
        {
            HttpCookie myCookie = HttpContext.Current.Request.Cookies["connectionString"];
            return GetConnectionStringFromName(myCookie);
        }
        set
        {
            if (HttpContext.Current.Request.Cookies["connectionString"] != null)
            {
                ExpireCookies(HttpContext.Current);
            }
            var allCookies = HttpContext.Current.Request.Cookies.AllKeys;
            HttpCookie cookie = new HttpCookie("connectionString");
            cookie.Value = value;
            cookie.Expires = DateTime.Now.AddYears(100);
            HttpContext.Current.Response.Cookies.Add(cookie);
        }
    }

1 Ответ

0 голосов
/ 15 декабря 2010

Ваше свойство UserName не использует выбранного поставщика, оно всегда использует поставщика по умолчанию. Как вы используете UserName? Кроме того, когда вы устанавливаете m.ProviderUserKey в GUID?


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

public static MembershipUser GetUser()
{
    return GetMembershipProvider().GetUser(UserName, true);
}

public static MembershipProvider GetMembershipProvider()
{
    string connection = AuthenticatedUser.ConnectionString;
    string provider;
    if (connection.Contains("website2"))
    {
        provider = "website2MembershipProvider";
    }
    else
    {
        provider = "AspNetSqlMembershipProvider";
    }

    return Membership.Providers[provider];
}

public static Guid LoginUserID
{
    get
    {
        Guid g = new Guid();

        MembershipUser m = GetUser();
        if (m != null)
        {
            g = (Guid)m.ProviderUserKey;
        }

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