【问题标题】:Wrong ID user - ASP NET CORE错误的 ID 用户 - ASP NET CORE
【发布时间】:2018-12-20 16:11:30
【问题描述】:

我正在使用 ASP.NET CORE 2.0,并且必须获取已登录的用户 ID。这是我的帐户控制人:

[Route("[controller]/[action]")]
public class AccountController : Controller
{
    private readonly SignInManager<ApplicationUser> _signInManager;
    private readonly ILogger _logger;
    private readonly UserManager<ApplicationUser> _userManager;

    public AccountController(SignInManager<ApplicationUser> signInManager, ILogger<AccountController> logger, UserManager<ApplicationUser> userManager)
    {
        _signInManager = signInManager;
        _logger = logger;
        _userManager = userManager;
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Logout()
    {
        await _signInManager.SignOutAsync();
        _logger.LogInformation("User logged out.");
        return RedirectToPage("./Index");
    }
}

我正在尝试以这种方式获取 id:

ApplicationUser a = new ApplicationUser();
        CR.FuncionarioId =  a.Id;

但是他返回给我一个完全不同的身份,为什么会这样?我使用身份。然后当我使用 a.Id 时,我会立即每隔一小时,即使是同一个用户,也会带来不同的 Id,并且不会带来 AspnetUsers 表中注册的 Id。

我需要获取用户ID的页面代码:

protected UserManager<ApplicationUser> UserManager { get; set; }
    public RecebimentoModel(CronoParque.Model.ApplicationDbContext context)
    {
        _context = context;
    }
    [BindProperty]
    public string Message { get; set; }
    [BindProperty]
    public ContasReceberViewModel ContasReceberVM { get; set; }



    public async Task<IActionResult> OnPost()
    {
        if (ModelState.IsValid)
        {
            var CR = _context.ContasReceber.Find(ContasReceberVM.ContasReceber.Id);
            CR.Quitado = true;
            CR.ValorPago = Convert.ToDecimal(ContasReceberVM.ContasReceber.ValorPago.ToString().Replace(",","."));
            CR.FormaPagamento = ContasReceberVM.ContasReceber.FormaPagamento;
            CR.DataPagamento = DateTime.Now;
            CR.FuncionarioId = UserManager.GetUserId(HttpContext.User);
            await _context.SaveChangesAsync();
            Message = "Pagamento Realizado com Sucesso!";

            return RedirectToPage("Index");
        }
        return RedirectToPage();
    }

【问题讨论】:

  • 您正在创建一个与 当前 用户无关的新的空 ApplicationUser
  • 我该怎么做?

标签: entity-framework asp.net-core asp.net-identity


【解决方案1】:
var user = _userManager.GetUserAsync(User);
var id = user.Result.Id;

在你的函数中试试这个,它应该可以工作:)

【讨论】:

    猜你喜欢
    • 2021-07-21
    • 2017-09-15
    • 2020-04-03
    • 1970-01-01
    • 2021-07-31
    • 2017-11-23
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    相关资源
    最近更新 更多