2014-12-05 60 views
0

正如我們所知道的新連接的ID可以使用自定義IUserIdProvider被設置好的。SignalR定製連接ID

public string GetUserId(IRequest request) 
{ 
    var context = request.GetHttpContext(); 
    ... 
} 

此方法必須返回新的連接ID。 我的web應用程序的體系結構是簡單的:

時使用連接時,應用程序生成GUID(字符串)可以通過從JavaScript變量acessed。然後在內部使用生成的guid。所以問題是我怎麼能通過附加變量signalR請求在GetUserId方法中使用它。 謝謝!

回答

1

首先,讓我們澄清一些術語。當您設置custom IUserIdProvider時,您實際上並未更改客戶端的連接ID,而是更改了客戶端的用戶ID。

客戶端的連接ID始終是當每個連接啓動由SignalR隨機生成一個GUID。這不能改變。要從給定其連接ID的集線器向客戶端發送消息,您需要編寫:Clients.Client(connectionId).myMethod(...)

默認情況下,客戶端的用戶ID是用戶的IPrincipal.Identity.Name,但可以根據自定義IUserIdProvider更改該值。與連接標識不同,用戶標識可以由多個連接共享。發生這種情況的一種常見情況是單個用戶使用SignalR在多個瀏覽器選項卡中打開的應用程序。要從給定用戶標識的集線器向用戶發送消息,您需要編寫:Clients.User(userId).myMethod(...)

要回答您的問題,您可以將set a query string parameter與每個SignalR請求一起發送,您可以在GetUserId方法中閱讀這些請求。請注意,攻擊者可以輕鬆地將自己的查詢字符串設置爲任何他們想要的。如果你不注意如何設計你的應用程序,這可以使模仿用戶成爲可能。

+0

的感謝!我喜歡它會有所幫助 – user2598575 2014-12-06 12:11:44