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

Я реализовал сторону 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

1 Ответ

2 голосов
/ 13 марта 2011

Я видел другой вопрос, поэтому я полагаю, вы используете 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");        
}
...