【问题标题】:SignalR and getting User ID without AuthenticationSignalR 并在没有身份验证的情况下获取用户 ID
【发布时间】:2018-06-20 16:04:32
【问题描述】:

我们正在开发一个使用 SignalR 进行交流的教学网站。

讲师登录并设置教学材料,准备就绪后,将发布一个研讨会 ID,以便用户可以将此值连同用户名一起输入到一个框中并加入会议。

参会者无需“正式登录”,只是观看会议。

但是,对于信号 R 组和交流,我必须在 Hub 中获取研讨会 ID 和用户名。

如何在不让用户创建登录凭据的情况下做到这一点?当 SignalR 代码创建连接时,我只需要向集线器发送一些参数(workshopID 和用户名)。因为导师要登录,我不想乱用默认行为。

我正在使用 MVC 核心 2.0。

以下代码有效,但我向系统中的每个人发送/接收消息,而不仅仅是目标群体:

Java 脚本:

  const connection = new signalR.HubConnectionBuilder()

    .withUrl("/Workshop")
    .build();

//

connection.on("ReceiveMessage", (user, userID, message) => {
    const msg = message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    const encodedMsg = user + " says " + msg;
    const li = document.createElement("li");
    li.textContent = encodedMsg;
    document.getElementById("messagesList").appendChild(li);
});


//connection.hub.qs = "Name=John";

connection.start().catch(err => console.error(err.toString()));

Csharp:

public override async Task OnConnectedAsync()
    {
        var test = Context.User.Identity.Name; //Only works if user is signed in
      //  var test2 = Context.User.FindFirst("WebID").Value;



        await Groups.AddToGroupAsync(Context.ConnectionId, "SignalR Users");
        await base.OnConnectedAsync();
    }

我尝试添加一个声明 (var test2...) 并检索它,但这似乎也不起作用。我也尝试过使用信号器查询参数....

【问题讨论】:

    标签: c# model-view-controller signalr core


    【解决方案1】:

    您可以使用 Context.Items 将信息存储在连接范围内。

    因此,您可以在用户输入他们的姓名时调用您的中心中的操作,并且该操作将用户名存储在项目中。 该信息在连接期间仍然可用。

    public class ChatHub : Hub
    {
        public void Login(string login)
        {
            Context.Items["Login"] = login;
        }
    
        public async Task SendMessage(string message)
        {
            await Clients.All.SendAsync(Context.Items["Login"] + "sends the message : " + message);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-11-22
      • 2017-12-18
      • 2018-04-14
      • 1970-01-01
      • 2022-01-03
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多