Удалите метод AddMessage из концентратора.
Это действительно так.
Если вам по-прежнему нужна функциональность из Интернета, то вам нужно будет установить какую-то защиту для проверки. SingalR еще не имеет этого встроенного.
Или, если вам это нужно только из-за пределов Интернета (скажем, сервер просто публикует события), тогда методы внешнего концентратора подойдут вам (см. Трансляция через концентратор за пределами концентратора внизу страницы: 1007 *https://github.com/SignalR/SignalR/wiki/Hubs)
Другой вариант - проверить аутентификацию в начале любого действия. У вас есть доступ к куки. Но я не уверен насчет нормальной системы членства, так как не пользуюсь ею. Поскольку у вас есть доступ к файлам cookie, вот шаблон, который я использую для аутентификации:
public SomeHub : Hub
{
public void RandomAction()
{
if(!CheckCookie("Role Required"))
{
//In here we have what happens when there is
// a cookie that is associated with the right Role Required
}
}
}
Возможно, вы сможете использовать систему членства в CheckCookie, однако это может помочь:
string CookieName = "Website Authentication";
string vReturn = null;
HttpCookie vCookie = null;
if(HttpContext.Current.Request.Cookies.AllKeys.Any(t => t == CookieName))
vCookie = HttpContext.Current.Request.Cookies[CookieName];
if(vCookie != null)
vReturn = FormsAuthentication.Decrypt(vCookie.Value).Name;
return vReturn;
Имя файла cookie членства не таково, это просто наполнитель.