Получить запись базы данных на основе идентификатора - PullRequest
0 голосов
/ 06 февраля 2020

Приветствие, у меня есть веб-сайт, на котором все продукты до сих пор в порядке, но я хочу, чтобы текущий пользователь, вошедший в систему, получал только свои данные, например. если у пользователя есть id = 1, он получит все продукты, id = 1 (у меня есть ограничение внешнего ключа между двумя таблицами), я использую очень простой контроллер, который получает только все продукты, я не нашел никакого решения в Google. Я использую. NET CORE 3.0 с базой данных EntityFramework и SQL SERVER. В настоящее время я использую токен JWT, который хранится в локальном хранилище в веб-браузере.

, вот мой ProductsController

public class ProductsController : ControllerBase
{
    private readonly IAuthRepository _repo;
    private readonly DataContext _context;
    public ProductsController(DataContext context, IAuthRepository repo)
    {
        _context = context;
        _repo = repo;
    }

    [HttpGet]
    public async Task<IActionResult> AllProducts()
    {
        var All = await _context.Product.ToListAsync();
        return Ok(All);



    }

1 Ответ

0 голосов
/ 09 марта 2020

ниже приведен код для получения идентификатора пользователя из токена jwt

var context = new HttpContextAccessor();
var principal = context.HttpContext.User;
if (null == principal)
        return null;
var id = principal.FindFirstValue(ClaimTypes.NameIdentifier);

Затем обновите метод действия "AllProducts" до

[HttpGet]
public async Task<IActionResult> AllProducts()
{
    var context = new HttpContextAccessor();
            var principal = context.HttpContext.User;
            if (null == principal)
                return null;
            var userid = principal.FindFirstValue(ClaimTypes.NameIdentifier);

    var All = await _context.Product.where(p=>p.id==userid).ToListAsync();
    return Ok(All);
}
...