探してもなかなか見つからなかったので自分用メモ。
コントローラクラスの引数に IHttpContextAccessor
のインスタンスを渡して httpContextAccessor.HttpContext.User.FindFirst
メソッドで探すらしい。あまり理解してません。
戻り値の型は Claim
で、 Claim.Value
でユーザIDが取得できる。未ログインの時には null が返ってくるのでチェックが必要。
下記のコードはログインしているかどうかチェックして、未ログインの時にはホーム画面にリダイレクト、ログインしているときには何かクエリを実行してビューに渡す例です。一応自分の環境では動作しました。
class SomeController : Controller {
private readonly Claim _claim;
// コンストラクタ
public SomeController(IHttpContextAccessor httpContextAccessor)
{
_claim = httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier);
}
// GET:
public async Task<IActionResult> Index()
{
if(_claim == null)
{ // ログインしてないときにはホーム画面にリダイレクト
return RedirectToAction("Index", "Home");
}
// ユーザID取得
string userId = _claim.Value;
// ユーザIDを使ってクエリとかして...
var query = // ...
// ビューに渡す
return View(await query.ToListAsync());
}
参考にしたリンク
その他参考
こちらのQAだと Controller.User を使っている。こちらの方がコードがシンプルかも。