仅接受注册用户的Silverlight RIA应用程序

时间:2011-03-13 01:42:46

标签: silverlight-4.0 ria wcf-ria-services

我已经实现了RIA WCF端以使用Forms身份验证进行身份验证,并且所有内容都可以按照预期在客户端上运行。

此应用程序应仅允许注册用户使用它(用户是由管理员创建的 - 没有注册页面。)

我的问题是,什么(或在哪里)应该是进行身份验证的有效方法;它必须在应用程序启动时显示(除非记住我已启用并且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 个答案:

答案 0 :(得分:2)

我看到你的其他问题,所以我假设你正在使用mvvm。我通过创建一个带有网格控件和导航框架的RootPage来实现这一目标。我将RootVisual设置为RootPage。我将导航帧源绑定到RootPageVM中的变量,然后在RootPageVM的consructor中,您可以根据用户身份验证将帧源设置为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");        
}