gpt4 book ai didi

java - SignalR Core Android 客户端,JWT 身份验证返回 NULL

转载 作者:太空宇宙 更新时间:2023-11-04 09:08:54 26 4
gpt4 key购买 nike

我正在构建一个与asp.net core signalR hub通信的android应用程序,没有身份验证,一切都很好,实际上我无法弄清楚。它在 Web APi 中,我使用 JWT 进行身份验证并将其作为访问 token 发送回 Android 设备,那么如何将 token 发送到集线器?我在文档中找到了这段代码:

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/myhub")
.withAccessTokenProvider(Single.defer(() -> {
// Your logic here.
return Single.just("An Access Token");
})).build();

但我想不通!!我应该做什么的逻辑是什么?这也是我的提供者类

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 为空!当我尝试这个时

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();

最佳答案

终于找到了解决方案,我将其放在这里以防有人遇到此问题:

PreferencesStore.loadPreferences(this);
String mToken = PreferencesStore.getToken();
hubConnection = HubConnectionBuilder.create("http://myserver/locationhub")
.withHeader("Authorization", mToken)
.build();

它与文档不同。在这里我使用了 .withHeader("Authorization", mToken) 但它工作得很好。

关于java - SignalR Core Android 客户端,JWT 身份验证返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59900781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com