2011-03-13 64 views
1

我已經實現了RIA WCF端以使用Forms身份驗證進行身份驗證,並且所有工作都可以在客戶端上按預期進行。Silverlight RIA僅接受註冊用戶的應用程序

此應用程序應該只允許註冊用戶使用它(用戶由admin創建 - 沒有註冊頁面)。

我的問題是,什麼(或哪裏)應該是進行認證的有效方式;它必須在應用程序啓動時顯示(除非記住我已啓動並且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 
+0

是你使用mvvm? – 2011-03-13 06:54:52

回答

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");   
} 
+0

@Derek,+1,你開始好,請詳細說明。 – Shimmy 2011-03-13 07:25:02

+0

IDK,我應該如何創建「AuthenticationService」事件的處理程序,以及如何在UI中管理它;當他未經認證時,我需要立即將用戶踢出去。該程序僅用於爲註冊用戶提供服務。用戶應該看到一個錯誤/死亡屏幕。 – Shimmy 2011-03-13 08:31:13

+2

我在LoginViewModel中有邏輯,如果用戶進行身份驗證,我會發送一條將在RootPageViewModel中收到的消息,告訴它導航到MainPage。您可以在註銷時執行相同的操作,發送消息導航回LoginPage。 – 2011-03-13 16:11:53

相關問題