控制器内的SignalR认证?

Dav*_*Fox 3 authentication asp.net-mvc-3 signalr

我正在使用SignalR,我似乎无法掌握身份验证来构建公共与安全聊天的演示应用程序.有一个聊天室,我想证明经过身份验证的用户将收到公共消息和经过身份验证的用户消息.使用股票MVC(3)互联网应用程序完成身份验证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
Run Code Online (Sandbox Code Playgroud)

Dav*_*Fox 6

完全忽视了那些显而易见的文献.一旦用户被认证为正常,所以 - 来自的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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)