Я хотел задать простой вопрос, и, похоже, я не могу найти ответ. Вот тэк, я хочу использовать уникальное значение, отличное Context.ConnectionId для идентификации пользователейSignalR - сопоставление неаутентифицированных пользователей с пользовательским идентификатором
Так, на моем классе хаб у меня есть этот метод, чтобы генерировать уникальный идентификатор GUID, этот метод вызывается, когда я начинаю соединение через мой javascript
// My hub class
//...
public void GenerateGuid()
{
var guid = Guid.NewGuid().ToString();
Clients.Caller.myGuid(guid);
}
.
// My javascript
$.connection.hub.start().done(function(){
$.connection.chatHub.server.generateGuid();
});
$.connection.chatHub.client.myGuid = function (guid){
if (docCookies.getItem("guid") === null){
docCookies.setItem("guid", guid);
}
}
Я также настроить пользовательский реализатор IUserIdProvider (как это было предложено в этих Документах https://www.asp.net/signalr/overview/guide-to-the-api/mapping-users-to-connections#IUserIdProvider использовать что-то другое, чем IPrincipal.Identity.Name (который не будет работать в любом случае, потому что мои пользователи не авторизованы))
Я думаю, что это нужно немного модифицировать, так как я не уверен, что вернуть в том случае, когда справы не определен
public class MyUserIdProvider : IUserIdProvider
{
public string GetUserId(IRequest request)
{
try
{
if (request.Cookies["guid"] != null)
{
return request.Cookies["guid"].Value;
}
}
catch (KeyNotFoundException kex)
{
// what to return here?
return Guid.NewGuid().ToString();
}
// what to return here?
return "";
}
}
. (Это установлено в моем Startup.cs так не стоит беспокоиться ни)
GlobalHost.DependencyResolver.Register(typeof(IUserIdProvider),() => new MyUserIdProvider());
So, со всем этим я полагаю, есть два вопроса
- Могу ли я что установил
MyUserIdProvider
класс в правильном направлении? - Когда я хочу получить доступ к идентификатору пользователя в классе Hub, как мне получить к нему доступ сейчас? Я не думаю, что я могу использовать
Context.ConnectionId
больше в вызовах, такие как это:return Groups.Add(Context.ConnectionId, [room]);