O.M*_*Koh 1 c# entity-framework-core asp.net-core-webapi
我有一个用户和一个 RefreshToken。我需要在这两个对象之间创建一对一的关系。我的 RefreshToken 对象看起来像这样
`public class RefreshToken
{
[ForeignKey("User")]
public string RefreshTokenID { get; set; }
public string UserId { get; set; }
public User User { get; set; }
public string Token { get; set; }
}`
Run Code Online (Sandbox Code Playgroud)
我的用户对象看起来像这样
`public class User : IdentityUser
{
public RefreshToken RefreshToken { get; set; }
}`
Run Code Online (Sandbox Code Playgroud)
以下是我如何使用 _refreshTokenRepository 为用户保留 RefreshToken:
`public async Task<bool> SaveAsync(User user, string newRefreshToken, CancellationToken ct = default(CancellationToken))
{
if(user.RefreshToken != null) return false;
RefreshToken rt = new RefreshToken(newRefreshToken, DateTime.Now.AddDays(5), user.Id);
await _dbContext.RefreshTokens.AddAsync(rt);
await _dbContext.SaveChangesAsync(ct);
return true;
}`
Run Code Online (Sandbox Code Playgroud)
当用户被重定向到“/refresh”路由时,以及当我需要根据从客户端返回的刷新令牌检查用户的刷新令牌时,就会发生此问题。此属性检查始终是null:
`var user = _userManager.Users.SingleOrDefault(u => u.UserName == username);
if(user == null || user.RefreshToken.Token != refreshToken) return BadRequest();`
Run Code Online (Sandbox Code Playgroud)
该用户实际上是正确的用户并且已找到,但 RefreshToken 属性为 null。
我尝试过使用 Fluent API 来创建这种关系。同样的结果。刷新令牌已成功保留到数据库,并且表中具有正确的用户 ID,但导航属性不起作用。有什么想法吗?
您应该修改这一行:
var user = _userManager.Users.SingleOrDefault(u => u.UserName == username);
Run Code Online (Sandbox Code Playgroud)
通过添加.Include(u => u.RefreshToken),因此该行应如下所示:
var user = _userManager.Users.Include(u => u.RefreshToken).SingleOrDefault(u => u.UserName == username);
Run Code Online (Sandbox Code Playgroud)
这将告诉商店也加载相关RefreshToken实体。
| 归档时间: |
|
| 查看次数: |
1423 次 |
| 最近记录: |