54

次の 2 つのアクセス可能なブール値を見てきました。

  • System.Web.Mvc.Controller.User.Identity.IsAuthenticated
  • System.Web.Mvc.Controller.Request.IsAuthenticated

これらの間に違いはありますか?どちらも同じことをしているように見えるので、どちらを使用すればよいかわかりません。

私がやりたいことは次のとおりです。

@if (User.Identity.IsAuthenticated) {
  if (User.IsInRole("Admin")) {
    @Html.ActionLink("Admin", "AdminController")        
  }
}

また

@if (Request.IsAuthenticated) {
  if (User.IsInRole("Admin")) {
    @Html.ActionLink("Admin", "AdminController")        
  }
}

上記のどちらでも同じように機能しますか?

4

3 に答える 3

71

違いはありません。唯一の違いは、ユーザーが認証されていない場合はUser.Identitynull になる可能性があるため、NRE を取得する可能性があることです。一方、2 番目のアプローチでは、内部でこれに対するチェックがあり、より安全です。

メソッドのRequest.IsAuthenticated実装方法は次のとおりです。

public bool IsAuthenticated
{
    get
    {
        return this._context.User != null && 
               this._context.User.Identity != null &&
               this._context.User.Identity.IsAuthenticated;
    }
}

基本的に、最初のものよりも少し安全です。

于 2013-09-30T06:36:48.247 に答える