首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UserManager返回的Id与数据库中的Id不同

UserManager返回的Id与数据库中的Id不同
EN

Stack Overflow用户
提问于 2017-08-14 12:56:37
回答 2查看 162关注 0票数 0

背景

我正在致力于一个.Net核心API项目,以推动一个社区驱动的歌词网站。这样用户就可以提交艺术家和歌词。每个艺术家都有许多歌词(经典一对多)。

对于身份验证和授权,我使用的是JWT令牌。

在我的歌词控制器上,我有一个[HttpPost]方法来创作一首歌词。下面是代码:

代码语言:javascript
复制
[Authorize]
[HttpPost("{artistSlug}/lyrics")]
public async Task<IActionResult> CreateLyric(string artistSlug, [FromBody] LyricCreateDto newLyricCreateDto)
{
  if (newLyricCreateDto == null) return BadRequest();
  if (!ModelState.IsValid) return BadRequest(ModelState);
  var user = _userManager.GetUserAsync(HttpContext.User);
  var lyricReadDto = await _lyricsService.AddNewLyric(user.Id.ToString(), artistSlug, newLyricCreateDto);
  if (lyricReadDto == null) return NotFound();
  return CreatedAtRoute("GetLyric", new {artistSlug, lyricSlug = lyricReadDto.Slug}, lyricReadDto);
}

在我的Startup.cs中,我有以下内容:

代码语言:javascript
复制
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, DatabaseDataSeeder databaseDataSeeder)
{
  loggerFactory.AddConsole();

  app.UseJwtBearerAuthentication(new JwtBearerOptions
  {
    AutomaticAuthenticate = true,
    AutomaticChallenge = true,
    TokenValidationParameters = new TokenValidationParameters
    {
      ValidIssuer = _config["Tokens:Issuer"],
      ValidAudience = _config["Tokens:Audience"],
      ValidateIssuerSigningKey = true,
      IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Tokens:Key"])),
      ValidateLifetime = true
    }
  });
  app.UseMvc();
  databaseDataSeeder.Seed().Wait();
}

问题

var user = _userManager.GetUserAsync(HttpContext.User);返回的用户的Id (类型为int)与dbo.AspNetUsers表中的用户Id不匹配。加上表dbo.AspNetUsers中的Id列为Guid类型。

我不知道这怎么可能!这是一张截图:

下面是对Studio中的dbo.AspNetUsers的查询:

为什么会发生这种情况?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-14 13:00:12

问题是,您正在查看异步方法的结果,换句话说,是一个Task<>,它具有一个与用户没有任何关系的Id属性。您需要await方法调用:

代码语言:javascript
复制
var user = await _userManager.GetUserAsync(HttpContext.User);
票数 5
EN

Stack Overflow用户

发布于 2017-08-14 13:00:21

您没有等待任务的结果,所以您实际上不是在调试/查看User,而是Task对象。添加await关键字。

代码语言:javascript
复制
var user = await _userManager.GetUserAsync(HttpContext.User);
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45675045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档