Создание ObjectContext для AuthenticationService без имени пользователя и пароля - PullRequest
1 голос
/ 15 июля 2010

Я использовал шаблон Silverlight BusinessApplication в VS2010. Я изменил AuthenticationService, чтобы использовать мои собственные методы аутентификации - требование состоит в том, чтобы пользователь входил в систему со своим именем входа SQL (без AD в компании).

При входе в систему я создаю SQLConnection, пытаюсь открыть его, затем получаю их данные (понятное имя, роли и т. Д.) Из таблицы User. Затем я сохраняю имя пользователя и пароль, которые они ввели, и каждый раз, когда они обращаются к БД через DomainService, я перезаписываю CreateObjectContext и вставляю имя пользователя и пароль, которые они ввели в БД.

Я изменил AuthenticationService для наследования от IAuthentication и LinqToEntitiesDomainService, в основном для доступа к таблице User.

У меня возникла проблема при запуске приложения до того, как пользователь вошел в систему. Элемент управления LoginStatus, который поставляется с шаблоном BusinessApplication, имеет следующую строку:

private readonly AuthenticationService authService = WebContext.Current.Authentication;

Это вызывает вызов конструктора моего AuthenticationService и, как часть этого, попытка создания ObjectContext, но пользователь еще не вошел в систему, поэтому у меня нет имени пользователя + пароля для добавления в строку подключения. Для разработчиков цели, я просто использую свое имя пользователя и пароль, если не вошел в систему, но теперь мне нужно это исправить.

Есть идеи, как мне это обойти? Насколько я вижу, у меня есть следующие варианты:

  • Не используйте EF (я бы предпочел использовать его, так как остальная часть моего доступа к данным осуществляется с помощью EF).
  • Создайте фиктивного пользователя в БД и используйте его в качестве учетных данных, если не вошли в систему (не идеально).

Есть ли другой способ обойти это? На конструкции моего AuthenticationService предотвратить вызов CreateObjectContext?

Любая помощь / предложения приветствуются.

Обновление

Я изменил свой AuthenticationService, чтобы он наследовал от DomainService, а не LinqToEntitiesDomainService, и использовал SqlDataReader для получения требуемых пользовательских данных, но мне по-прежнему любопытно, есть ли другой способ.

1 Ответ

0 голосов
/ 19 февраля 2012

Следуйте этому примеру:

http://code.msdn.microsoft.com/Custom-Authentication-96ca3d20/view/Reviews

Обратите внимание, что существует служба DbDomainService, если вы используете DbContext, а не ObjectContext.

...