Skip to content

Context.User is Null on [Authorized] SignalRHub Task OnDisconnected  #2753

@albhardy

Description

@albhardy

I'm using SignalR 2.0 on MVC5 application using the new ASP.NET Identity feature.
Context.User.Identity.Name is correctly populated on Task OnConnected but suddenly becomes null after user navigate away/logout.

Code:

  public override Task OnDisconnected() {
            string userName = Context.User.Identity.Name; //results in null exception
            string connectionId = Context.ConnectionId; //not null
           return base.OnDisconnected();
        }

Exception message:

System.NullReferenceException was unhandled by user code
  HResult=-2147467261
  Message=Object reference not set to an instance of an object.
  Source=SignalRChat
  StackTrace:
       at SignalRChat.Hubs.ChatHub.OnDisconnected() in f:\SignalRChat\SignalRChat\Hubs\ChatHub.cs:line 34
       at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.Disconnect(IHub hub)
       at Microsoft.AspNet.SignalR.Hubs.HubPipelineModule.<>c__DisplayClass13.<BuildDisconnect>b__11(IHub hub)
       at Microsoft.AspNet.SignalR.Hubs.HubPipeline.Disconnect(IHub hub)
       at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.<OnDisconnected>b__21(IHub hub)
       at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.<>c__DisplayClass2a.<ExecuteHubEvent>b__26(IHub instance)
       at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()
       at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
       at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
       at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.ExecuteHubEvent(IRequest request, String connectionId, Func`2 action)
       at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.OnDisconnected(IRequest request, String connectionId)
       at Microsoft.AspNet.SignalR.PersistentConnection.<>c__DisplayClassa.<ProcessRequest>b__9()
       at Microsoft.AspNet.SignalR.TaskAsyncHelper.FromMethod(Func`1 func)
  InnerException: 

However, such issue does not happen if I use authentication in https://github.com/tugberkugurlu/SignalRSamples/tree/master/ConnectionMappingSample

 [HttpPost]
        [ActionName("Login")]
        public ActionResult PostLogin(LoginModel loginModel) {
            if (ModelState.IsValid) {
                FormsAuthentication.SetAuthCookie(loginModel.Name, true);
                return RedirectToAction("index", "home");
            }
            return View(loginModel);
        }

Platform: Windows 7, VS2013 Express

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions