SignalR使用自定义身份验证将用户映射到connectionID

时间:2015-03-30 14:13:21

标签: c# authentication signalr

我正在尝试实现聊天应用程序。用户应该能够向特定用户发送消息。为此,我需要将用户名映射到他们的connectionID。

我的客户端正在使用自定义身份验证用户名存储在会话["用户"]中。因此,我没有将用户名存储在Context.User.Identity.Name中,这是SignalR通常从中获取用户名的地方。

我如何获取登录用户的用户名,以便将其映射到Context.ConnectionID?

以下是公共类ChatHub的一些示例实现:我在网上找到的Hub。

private readonly static ConnectionMapping<string> _connections =
        new ConnectionMapping<string>();

    public void SendChatMessage(string who, string message)
    {
        string name = Context.User.Identity.Name;

        foreach (var connectionId in _connections.GetConnections(who))
        {
            Clients.Client(connectionId).addChatMessage(name + ": " + message);
        }
    }

    public override Task OnConnected()
    {
        string name = Context.User.Identity.Name;

        _connections.Add(name, Context.ConnectionId);

        return base.OnConnected();
    }

1 个答案:

答案 0 :(得分:3)

使用查询字符串传递您的用户名。

<强>客户端

首先设置查询字符串

对于自动生成的代理

$.connection.hub.qs = { 'username' : 'anik' };

对于手动代理

var connection = $.hubConnection();
connection.qs = { 'username' : 'anik' };

然后启动集线器连接

服务器

public override Task OnConnected()
{
    var username= Context.QueryString['username'];
    return base.OnConnected();
}