RealPath:
WebPath:
2017/04/27 01:01 (JST) 更新
ユーザ情報 >>

ログイン中ユーザ情報の取得

Contents

IPrincipal 参照の取得方法

Controller または ApiController のメソッド内であれば User プロパティにより IPrincipal 参照を取得することができ、一般的にはそこからユーザ認証情報を取得する。それ以外の場所から IPrincipal 参照を取得したい場合、HttpContext.Current.User により IPrincipal 参照が取得可。

本セクションでは(主に記述を簡略化するために)Controller または ApiController メソッド内での User プロパティを利用する形でサンプルコードを記述するが、任意の User プロパティは HttpContext.Current.User として読み替えても構わない。

認証済みかどうか

bool authed = User.Identity.IsAuthenticated;

ユーザ識別子の取得

ユーザ認証済みであれば User.Identity.GetUserId() によりユーザ識別子を取得できる。ここで用いる GetUserId() は拡張メソッドであり、using Microsoft.AspNet.Identity; しておかないと利用できないことに注意。

....
// GetUserId() を利用するためにはこの using が必要
using Microsoft.AspNet.Identity;
....
public class HogeController : Controller
{
    public ActionResult Index()
    {
        ViewBag.Message = "Your contact page. ";
        if (User.Identity.IsAuthenticated)
        {
            // GetUserId() によりユニークなユーザ識別子を取得
            // (例: "6f95ed96-730c-4c01-ad76-ea6080a19fbe")
            string id = User.Identity.GetUserId();
            ViewBag.Message = "Your id = " + id;
        }
        else
        {
            ViewBag.Message = "No login information";
        }
        return View();
    }
}

ユーザ名の取得

ユーザ認証済みであれば User.Identity.GetUserName() によりユーザ名を取得できる。ここで用いる GetUserName() は拡張メソッドであり、using Microsoft.AspNet.Identity; しておかないと利用できないことに注意。

....
// GetUserName() を利用するためにはこの using が必要
using Microsoft.AspNet.Identity;
....
public class HogeController : Controller
{
    public ActionResult Index()
    {
        ViewBag.Message = "Your contact page. ";
        if (User.Identity.IsAuthenticated)
        {
            // GetUserName() によりユーザ名を取得
            // (例: "kobake")
            string name = User.Identity.GetUserName();
            ViewBag.Message = "Your name = " + name;
        }
        else
        {
            ViewBag.Message = "No login information";
        }
        return View();
    }
}

ApplicationUser の取得

ApplicationDbContext, UserManager<ApplicationUser> 経由で ApplicationUser 情報を取得する。

....
// GetUserId() を利用するためにはこの using が必要
using Microsoft.AspNet.Identity;
....
public class HogeController : Controller
{
    public ActionResult Index()
    {
        if (User.Identity.IsAuthenticated)
        {
            using (var context = new ApplicationDbContext())
            {
                UserManager<ApplicationUser> userManager
                    = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));

                // ApplicationUser 情報の取得。これで ApplicationUser の任意フィールド値が取り出せる。
                ApplicationUser user = userManager.FindById(User.Identity.GetUserId());

                // 例えばメールアドレスを取得したり等。
                var email = user.Email;
                ViewBag.Message = "Your email = " + email;
            }
        }
        else
        {
            ViewBag.Message = "No login information";
        }
        return View();
    }
}