4

我正在玩 SignalR,我似乎无法掌握身份验证来构建公共与安全聊天的演示应用程序。有一个聊天室,我想证明经过身份验证的用户会收到公共消息经过身份验证的用户消息。身份验证是使用库存 MVC(3) Internet 应用程序完成的AccountController

在控制器中获取 Hub 上下文没有意义,因为它没有连接 ID。如何获取连接 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
4

2 回答 2

7

完全忽略了明显且有据可查的情况。一旦用户正常通过身份验证,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);
        }
    }
}
于 2012-11-14T23:38:58.743 回答
4

确保您查看最新版本的 SignalR,因为我们有很好的内置属性,您现在可以将其用于授权。

http://weblogs.asp.net/davidfowler/archive/2012/11/11/microsoft-asp-net-signalr.aspx

于 2012-11-16T04:21:19.617 回答