MVC3 + Как получить имя текущего пользователя, вошедшего в систему - PullRequest
6 голосов
/ 13 февраля 2012

Я новичок в MVC и на самом деле новичок в веб-разработке все вместе. У меня около 7 лет опыта разработки, но в сфере услуг, баз данных, объектных моделей и т. Д., В основном, среднего и внутреннего уровня разработки Я пытаюсь изучить ASP.NET и решил создать сайт с использованием MVC3 для личного сайта для себя. Я буду размещать это от учетной записи в dotnet-hosts.com. Вот мой вопрос ... У меня нет домена, и я буду использовать встроенный поставщик членства. В автоматически сгенерированном коде, который был создан при добавлении шаблона проекта, я заметил, что в AccountController в методе ChangePassword (ChangePasswordModel модель) есть эта строка кода ...

MembershipUser currentUser = Membership.GetUser(User.Identity.Name, true /* userIsOnline */);

Мой вопрос конкретно касается User.Identity.Name, похоже, он бы возвращал имя пользователя Windows точно так же, как Environment.UserName. Шаблон Visual Studio, который я использовал, - это (Mobile Ready HTML5 MVC.NET), так как я хочу иметь возможность поддерживать клиентов с любого устройства ... Windows PC, Apple, Windows Phone, iPhone и т. Д. ... Если вызов User.Identity.Name правильно, тогда я хотел бы спросить, как это работает на устройствах, которые не являются Windows, как iPhone? Если мое предположение верно, что это будет работать только на компьютерах Windows с доменом, то как мне этого добиться? Возможно, мне нужно использовать кеширование? Если да, могу ли я получить имя пользователя и его IP-адрес для использования в качестве ключа кэша со страницы аутентификации?

Мой вопрос высокого уровня ... Как я могу получить текущее имя пользователя, вошедшего в систему, независимо от устройства / платформы? Я знаю, что этот вопрос, вероятно, написан не очень хорошо и может быть трудно понять ... Я прошу прощения за это. Я новичок в веб-разработке и пытаюсь намочить ноги и хотел бы перейти на новейшие технологии.

Ответы [ 2 ]

6 голосов
/ 13 февраля 2012

Звонок правильный. User.Identity.Name заполняется любым используемым поставщиком проверки подлинности - проверкой подлинности Windows, проверкой подлинности с помощью форм, каким-либо настраиваемым поставщиком проверки подлинности или любым другим. Он не привязан к конкретному пользовательскому «типу». Поставщик аутентификации отвечает за то, чтобы объект Identity соответствовал текущему пользователю при каждом запросе. Обычно об этой части заботятся об использовании файлов cookie и базы данных.

Шаблон MVC (хотя я не видел этот шаблон со времен MVC 2) использует класс ASP.NET Membership, который, в свою очередь, использует поставщика членства - например, SqlMembershipProvider или ActiveDirectoryMembershipProvider - Первый хранит учетные данные ваших пользователей (имя пользователя, пароль и т. д.) в базе данных SQL Server, второй использует Active Directory (то есть, в основном, для входа в Windows). SqlMembershipProvider является значением по умолчанию, а MVC настроен на использование локального файла базы данных SQLExpress в качестве хранилища пользователя.

Поставщик аутентификации, реализованный в проекте шаблона, использует FormsAuthentication, который выполняет процедуру входа в систему с помощью простой HTML-формы (в виде LogOn) и поддерживает вход пользователя в систему с помощью зашифрованного файла cookie. Работает на любой платформе.

Настройка для FormsAuthentication и SqlMembershipProvider находится в web.config (тот, что находится в корне сайта). Там вы можете найти строки подключения для базы данных SQLExpress (и, например, изменить их на использование «реального» SQL Server, если необходимо), время ожидания для входа в систему и т. Д.

(Обратите внимание, что многие из этих настроек можно легко выполнить в графическом интерфейсе с помощью кнопки «Конфигурация ASP.NET» на панели инструментов обозревателя решений в Visual Studio - она ​​также предоставляет простой способ настройки первых пользователей) .

Короче говоря, все готово к работе - и не блокирует пользователей не-Windows.

4 голосов
/ 13 февраля 2012

Как вы сказали User.Identity.Name действительно правильно. для возврата имени вошедшего в систему пользователя. Но раздел членства, как вы сказали, предоставляет только учетные записи Windows. Вы можете использовать подобное без пользователя учетных записей Windows, чтобы работать в каждом сценарии, и все же можете проверить на наличие окон, если таковые имеются. Если вы вызываете его без членства и следует шаблону MVC3 по умолчанию, он должен работать нормально.

String Username = User.Identity.Name;

Когда вы входите в систему, используя шаблон MVC3, он создает authcookie. См. Код контроллера учетной записи . Здесь в него передаются два параметра. Имя пользователя и для сохранения (когда браузер закрыт - логин все еще кэшируется).

Имя пользователя - это строковое поле, которое называется User.Identity.Name и фактически означает, что в него можно вставить что угодно, и оно никак не связано с входом в Windows.

Вы можете проверить вход в систему по желаемому методу и, если да, установить cookie, используя метод authcookie. (его зашифровано). И установите имя пользователя на то, что вы хотите. И если ваша проверка пользователя не удалась, не создавайте ее и перенаправьте обратно на страницу.

См. Пример кода. Это все из памяти, так как у меня нет кода передо мной для справки. Но все это в контроллере учетной записи, Login Action.

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

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

[Authorize]
public ActionResult DoSomething()
{
    // ...
}

Надеюсь, я помог.

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