получение имени пользователя, которое установлено в UserData FormsAuthenticationTicket - PullRequest
3 голосов
/ 23 декабря 2010

Я подумываю получить имена пользователей моего сайта, используя это, на мой взгляд (синтаксис Razor):

@MySite.Helpers.Utils.UserName

вот класс утилит:

public class Utils
{
    static FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;

    public static string UserName { get { return id.Ticket.UserData; } }
}

Есть ли потенциальные проблемы с этим кодом?

Причина, по которой я это делаю, заключается в том, что я собираюсь сохранить имя пользователя в поле userdata нового FormsAuthenticationTicket при входе пользователя в систему.

Я обращаюсь с этим так, потому что я использую facebook connect и хочу сохранить там ID в поле имени пользователя в БД и их имена пользователей / полные имена в отдельной таблице.

поэтому моя логика обработки имен пользователей Facebook и зарегистрированных имен пользователей моего сайта должна обрабатываться по-разному. При входе в систему я собираюсь обработать его, а затем установить userdata в качестве фактического имени пользователя.

поэтому по всему сайту я могу просто получить имя зарегистрированного пользователя, используя: @MySite.Helpers.Utils.UserName

это звучит нормально? факт, что его статическая переменная будет проблемой?

или есть лучший способ справиться с этим? переменные сеанса, может быть?

спасибо

1 Ответ

1 голос
/ 23 декабря 2010

Причина, по которой я это делаю, заключается в том, что я собираюсь сохранить имя пользователя в поле userdata нового FormsAuthenticationTicket, когда пользователь входит в систему.

Имя пользователя, вошедшего в систему в данный момент.Пользователь уже сохранен в куки аутентификации.Вам не нужно хранить его еще раз в UserData.И чтобы получить его в шаблоне Razor, вы можете просто:

@User.Identity.Name

Очевидно, что рекомендуется украшать действие контроллера, отображающее это представление, с атрибутом [Authorize], чтобы гарантировать, что пользователь аутентифицирован перед доступомэто или вы можете получить NullReferenceException с этим кодом.

В качестве альтернативы вы можете написать помощника:

public static MvcHtmlString Username(this HtmlHelper htmlHelper)
{
    var identity = htmlHelper.ViewContext.HttpContext.User.Identity;
    if (identity.IsAuthenticated)
    {
        return MvcHtmlString.Create(identity.Name);
    }
    return MvcHtmlString.Empty;
}

, который вы можете использовать так:

@Html.Username()
...