-
Notifications
You must be signed in to change notification settings - Fork 2.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Context.User is Null on [Authorized] SignalRHub Task OnDisconnected #2753
Comments
You said it becomes null after logout or navigation or both? |
Both. |
So if you navigate away without logging out, it happens? Or do you have to logout then navigate? |
Yes, I tried navigate away without logging out (and Task OnDisconnected is triggered). Basically what I did:
|
@Xiaohongt can you take a look at this? |
After navigate away or logout, WebSocketTransport, ServerSentEventsTransport and LongPollingTransport repro, Request.User is null. Note, ForeverFrameTransport doesn't repro, it doesn't repro when use Self Host. When debug for WebSocketTransport, after navigate away, for abort request, in TransportDisconnectBase class, at beginning _context.Request.User is not null, somehow in Microsoft.AspNet.SignalR.Transports.ForeverTransport.OnMessageReceived(Microsoft.AspNet.SignalR.Transports.PersistentResponse response, object state) , Need to look more |
@davidfowl have you been able to look at this? I'm dealing with the same thing. I don't understand anything @Xiaohongt said. |
@polygit nope, will put it into 2.0.3. |
@gustavo-armenta can you look at this? Does it happen for all transports? |
@xueye and I are both experiencing this issue on our application as well. |
OK guys, I looked into this issue. I can only repro the failure when using websockets, for the other transports is working fine. PLEASE CONFIRM you only see this issue on websockets. On the case of websockets, I see the body of OnDisconnected method is using a Context.Request from the original request that opened the connection, its not using the "signalr/abort" request. On the log below, the hashCode is from the AspNetDictionary instance that contains the environment key "server.User". The dictionary entry has a value ClaimsPrincipal but when the disconnection is triggered, there is some piece of code setting the value to null. I have not found yet what is causing it.
|
I can only reproduce issue using Web Sockets or Server Sent Events. Using Forever Frame or Long Polling makes me have a user on disconnect. Edit: Actually, the SSE issue appears to have been a fluke. It is now working as expected for me using Server Sent Events. Previously, I would connect with SSE and get a series of disconnects in rapid procession where the user was null. Now it connects and disconnects just fine. |
OK, confirming issue only repro on websockets @davidfowl, |
@gustavo-armenta Please include issue numbers in your commit messages, e.g. #2753. You should also include issue numbers in your PRs. This makes life much easier on those going back through old issues and trying to figure out how the issues were resolved. |
@gustavo-armenta can you merge this change into dev |
Verified that with fix Context.User is not null OnDisconnected event |
|
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:
Exception message:
However, such issue does not happen if I use authentication in https://github.com/tugberkugurlu/SignalRSamples/tree/master/ConnectionMappingSample
Platform: Windows 7, VS2013 Express
The text was updated successfully, but these errors were encountered: