【问题标题】:SignalR - Mapping ConnectionId to one User on DataBase **(Custom ConnectionId from DB)**SignalR - 将 ConnectionId 映射到数据库上的一个用户**(来自数据库的自定义 ConnectionId)**
【发布时间】:2014-05-01 13:14:07
【问题描述】:

我想知道是否有任何方法可以在不使用IPrincipal.Identity.Name 的情况下将ConnectionId 映射到用户。我已经在使用自定义类“IUserIdProvider”来生成 userId

public class CustomUserIdProvider : IUserIdProvider
{
     public string GetUserId(IRequest request)
    {
        // your logic to fetch a user identifier goes here.
        // for example:

        ////////////////////////////////////////////////////////////////////////
        //**I do not want to use the code below to find the User in my database**
        var userId = MyCustomUserClass.FindUserId(request.User.Identity.Name);
        /////////////////////////////////////////////////////////////////////////

        return userId.ToString();
    }
}

这都是因为我没有使用 ASP.NET 身份验证方法。真正需要的是想办法把用户ID传递给ConnectionId的时间。

我需要一种方法来提供(或接收)来自我的数据库用户(user_id)的数据标识符。或其他方式(逻辑)将用户与ConnectionId 相关联。

提前致谢!

【问题讨论】:

    标签: asp.net signalr real-time signalr-hub


    【解决方案1】:

    您可以将查询字符串中有关已连接用户的参数从客户端传递到服务器 像这样:

    在客户端:

    $.connection.hub.qs = "myUser=user";
    

    在服务器端:

    var myUser= Context.QueryString["myUser"];
    

    【讨论】:

    • 我同意,我认为这是要走的路,您可以使用CustomUserIdProvider 中的服务器端代码。请注意,您必须在开始连接之前设置 qs 成员,AFAIK。
    • 感谢个人回复,很高兴个人回答,我很感激有人愿意提供帮助。有了这个并使用 IUserIdProvider 我如何通过集线器中的查询字符串获取最后一个 id?我还是不能使用userid那个属“GETUSERID(IRequest request)”的方法。
    • 会为每个客户端生成和处理一个 Hub 实例,这意味着它是瞬态的,因此查询 id 是连接到该集线器的客户端的查询 id。因此 Context.QueryString 仅在集线器中有效。
    • 只是语法上的更正:$connection.hub.qs = {'version': '1 .0'};
    • @Shachaf.Gortler 从客户那里这样做很危险吗?用户不能更改此 javascript(比如他们将“user”更改为“user2”)并且服务器最终将错误的用户存储在 myUser 中吗?感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    相关资源
    最近更新 更多