Я создаю android приложение, которое взаимодействует с asp. net core signalR hub, все было хорошо без аутентификации, на самом деле я не могу понять это. Он находится в Web APi, и я использую JWT для аутентификации и отправляю его обратно на устройство android в качестве токена доступа, так как отправить токен на концентратор ?? я нашел в документации этот код:
HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/myhub")
.withAccessTokenProvider(Single.defer(() -> {
// Your logic here.
return Single.just("An Access Token");
})).build();
но я не мог понять это !! что такое логика c, что я должен делать ?? также это мой класс провайдера
public class MyCustomProvider : IUserIdProvider
{
public string GetUserId(HubConnectionContext connection)
{
//throw new NotImplementedException();
return connection.User?.FindFirst(ClaimTypes.Email).Value?.ToString();
}
}
это мой хаб
public class LocationHub : Hub
{
private readonly UserManager<ApplicationUser> _userManager;
public ApplicationDbContext _Context { get; }
public LocationHub(ApplicationDbContext context, UserManager<ApplicationUser> userManager)
{
_Context = context;
_userManager = userManager;
}
public async Task ShareLocation(double Latitude , double Longitude)
{
Console.WriteLine("New location from: "+Context.UserIdentifier+"::"+ Latitude + "///" + Longitude);
await Clients.Others.SendAsync("ReceiveNewLocation", Latitude, Longitude);
}
public override Task OnConnectedAsync()
{
var user = _Context.Users.Where(u => u.Email == Context.UserIdentifier).FirstOrDefault();
user.LoginStatus = true;
_Context.SaveChanges();
return base.OnConnectedAsync();
}
Context.UserIdentifier имеет значение Null !! когда я попробую это
PreferencesStore.loadPreferences(this);
String mToken = PreferencesStore.getToken();
Log.d("SignalR", mToken);
hubConnection = HubConnectionBuilder.create("http://myserver/locationhub")
.withAccessTokenProvider(Single.defer(() -> {
return Single.just(mToken);
}))
.build();