У меня есть простая реализация чата в SignalR. Все могут читать то, что печатают другие, но только зарегистрированные пользователи могут говорить:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
namespace WebApplication1.Hubs
{
public class ChatHub : Hub
{
[Authorize]
public async Task SendMessage(string message)
{
await Clients.All.SendAsync("ReceiveMessage", Context.User.Identity.Name, message);
}
}
}
И это работает. За исключением... Когда у пользователя открыт чат в одной вкладке, но он входит/выходит из системы в другой вкладке.
- Когда пользователь выходит из системы на другой вкладке, он по-прежнему может свободно говорить в чате. Чат отправляет их сообщения с их никнеймом, который у них был до выхода из системы. Это сохраняется до тех пор, пока вкладка чата не будет перезагружена.
- Когда пользователь не вошел в систему, но по-прежнему открывает чат на одной вкладке, а затем входит в систему на другой вкладке, он может не говорить в чате, пока не перезагрузит вкладку чата.
Почему, несмотря на наличие атрибута [Authorize]
, метод SendMessage
продолжает работать, даже если пользователь больше не аутентифицирован?
Как это исправить? Как заставить мой чат-хаб следовать аутентификации, которая происходит после подключения клиента?
ASP .NET Core 2.1 RC1, так как 2.0 не поддерживает SignalR.
РЕДАКТИРОВАТЬ: Согласно запросу из комментариев, Startup.Configure
:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseSignalR(routes =>
{
routes.MapHub<ChatHub>("/chathub");
});
app.UseMvc();
}
Startup.Configure
метод. - person aaron   schedule 21.05.2018Authorize
должен обнаруживать, что эти файлы cookie не отправляются, и блокировать запрос. Моя ментальная модель неверна? - person   schedule 21.05.2018