Приложение Silverlight RIA, которое принимает только зарегистрированных пользователей

Я реализовал сторону RIA WCF для аутентификации с помощью проверки подлинности с помощью форм, и все работает с клиентом, как и ожидалось.

Это приложение должно позволять использовать его только зарегистрированным пользователям (пользователи создаются администратором - нет страницы регистрации).

Тогда мой вопрос заключается в том, что (или где) должно быть эффективным способом аутентификации; он должен отображаться при запуске приложения (если только вы не помните, что я был включен, а cookie все еще активен), и если пользователь выходит из системы, он должен автоматически выйти из интерфейса и снова вернуться к форме входа.

Обновление (код обрезан для краткости):

Public Class MainViewModel
   ....

   Public Property Content As Object 'DP property

   Private Sub ValidateUser()
       If Not IsUserValid Login()
   End Sub

   Private Sub Login()
     'I want, that when the login returns a success it should continue
     'navigating to the original content i.e.
     Dim _content = Me.Content
     Me.Content = Navigate(Of LoginPage) 
     If IsUserValid Then Me.Content = _content
   End Sub

End Class

person Shimmy Weitzhandler    schedule 13.03.2011    source источник


Ответы (1)


Я видел у вас другой вопрос, поэтому я предполагаю, что вы используете mvvm. Я достигаю этого, создавая RootPage с элементом управления сеткой и навигационным фреймом. Я установил RootVisual на RootPage. Я привязываю источник навигационных фреймов к переменной в RootPageVM, затем в конструкторе RootPageVM вы можете установить источник фрейма либо на MainPage, либо на LoginPage на основе аутентификации пользователя. RootPageVM также может получать сообщения для управления дальнейшей навигацией, например выходом из системы.

Использование MVVM-Light.

Итак, в RootPageView (установленном как RootVisual) что-то вроде:

public RootPageViewModel()
{
    Messenger.Default.Register<NotificationMessage>
      (this, "NavigationRequest", Navigate);

    if (IsInDesignMode)
    {
    }
    else
    {               
        FrameSource = 
          WebContext.Current.User.IsAuthenticated ?
          "Home" : 
          "Login";               
    }
}

И способ навигации:

private void Navigate(NotificationMessage obj)
{          
    FrameSource = obj.Notification;
}

В LoginViewModel:

if (loginOperation.LoginSuccess)
{                                                           
    Messenger.Default.Send
      (new NotificationMessage(this, "Home"), "NavigationRequest");        
}
person Derek Beattie    schedule 13.03.2011
comment
IDK, как, где и как я должен создавать обработчики событий AuthenticationService и как управлять ими в пользовательском интерфейсе; Мне нужно немедленно выгнать пользователя, когда он перестанет аутентифицироваться. программа предназначена только для обслуживания зарегистрированных пользователей, без авторизации. пользователи должны увидеть экран ошибки/тупика. - person Shimmy Weitzhandler; 13.03.2011
comment
У меня есть логика в LoginViewModel, если пользователь аутентифицируется, я отправляю сообщение, которое будет получено в RootPageViewModel, сообщая ему о переходе на MainPage. Вы можете сделать то же самое, когда они выходят из системы, отправить сообщение, чтобы вернуться на страницу входа. - person Derek Beattie; 13.03.2011
comment
Я предпочитаю использовать EventAggregator PRISM, но не знаю, как это сделать. - person Shimmy Weitzhandler; 13.03.2011
comment
В исходном коде NavDemo, bitbucket.org/dbeattie/navdemo, RootView и LoginView можно добавить так же, как MainView и SubViews в NavDemo. Затем установите RootView как RootVisual. - person Derek Beattie; 14.03.2011
comment
Как Prism поддерживает управление событиями и представлениями? Я предпочитаю придерживаться призмы, а не MvvmLight. - person Shimmy Weitzhandler; 14.03.2011
comment
Не знаю, концепции должны быть похожими, я еще не вникал в Prism, но планирую. - person Derek Beattie; 14.03.2011
comment
@ Дерек, спасибо за все ваши ответы. Я решил, что не буду использовать URI для навигации. вместо этого я создал в основном контейнере ContentControl, свойство Content которого связано с соответствующим свойством Content в vm. Я хочу перейти к LoginView (установив для него текущий контент), но я также хочу получить результат от LoginView при успешном входе в систему, чтобы я мог перенаправить пользователя на исходный контент, как мне это сделать? - person Shimmy Weitzhandler; 27.03.2011
comment
@ Дерек, я добавил в свой вопрос кое-что, объясняющее, что я пытаюсь сделать. - person Shimmy Weitzhandler; 27.03.2011
comment
Выполните эту аутентификацию в LoginViewModel, он обрабатывает нажатие кнопки входа в систему, выполняет асинхронный вызов RIA при обратном вызове, если он действителен, отправляет навигационное сообщение в корневой каталог для переключения содержимого. - person Derek Beattie; 27.03.2011