2012-11-14 45 views
3

我在玩SignalR,我似乎無法掌握身份驗證以構建公共vs安全聊天的演示應用程序。有一個聊天室,我想證明經過身份驗證的用戶將收到公共消息經過身份驗證的用戶消息。使用股票MVC(3)互聯網應用程序AccountController完成身份驗證。控制器內的SignalR認證?

在控制器中獲取Hub上下文沒有意義,因爲它沒有連接標識。如何獲取連接ID以將特定連接添加到「安全聊天」組?應該在控制器中完成嗎?或者我錯過了某種方式在集線器內部做到這一點?

[HttpPost] 
public ActionResult LogOn(LogOnModel model, string returnUrl) 
{ 
    if (ModelState.IsValid) 
    { 
     if (Membership.ValidateUser(model.UserName, model.Password)) 
     { 
      FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); 

      var context = GlobalHost.ConnectionManager.GetHubContext<Chat>(); 
      // add to signalr secure group 
      // but no connection id here 
+1

當您按照正常方式對用戶進行身份驗證時,您可以從集線器內訪問用戶身份。演示中心有一個連接方法,客戶端會調用連接標識符來映射您的商店標識。 (我沒有嘗試過我的自我,但多數民衆贊成我的理解,當看着聊天演示。) –

回答

6

完全俯瞰明顯,有據可查。一旦用戶被正常認證,Hub派生的課程將能夠確認認證,例如

public class Chat : Hub 
{ 
    public void send(string message) 
    { 
     Clients.addMessage(message); 
    } 

    public void securesend(string message) 
    { 
     if (this.Context.User.Identity.IsAuthenticated) 
     { 
      // might not yet be a part of the "secured" group 
      Groups.Add(this.Context.ConnectionId, "secured"); 
      Clients["secured"].addMessage("[SECURED] " + message); 
     } 
    } 
} 
+1

這是記錄在哪裏? – Bhavin

+0

^我沒有在任何地方找到 – Jonesopolis

+0

對不起,不清楚 - 這只是使用常規的.NET身份驗證。 SignalR具有另外一個可以使用的Authorize屬性,但對於簡單的場景並不是必需的。 http://www.asp.net/signalr/overview/signalr-20/security/hub-authorization –