web-dev-qa-db-ja.com

アクション内でユーザーが承認されているかどうかを確認する方法

通常、アクションは[Authorize]で保護しますが、今回は、アクション内でユーザーが承認されているかどうかを確認する必要があります。

例えば

if(userIsAuthorized) {
    //do stuff
}
else {
    //return to login page
}

私は信じている 「フォーム認証」を使用しています

この質問は一種の this に似ていますが、与えられた回答のいずれも機能しないようです。

編集:私はさらに掘り下げました-[Authorize]のあるアクションでブレークポイントを設定すると、User.Identityが設定されますが、それがないアクションでは、ログに記録されていても、User.Identityが空ですに

26
elwyn

ユーザーがログインしているかどうかを知りたいだけの場合:

if (User.Identity.IsAuthenticated) { ... }

役割固有の何かを実行しようとしている場合:

if (User.IsInRole("Administrators")) { ... }

UserインスタンスはControllerクラスのパブリックプロパティであるため、作成したコントローラーから常にアクセスできます。ログインしているユーザーがいない場合は、GenericPrincipalにはUserを、User.IdentityにはGenericIdentityを設定する必要があるため、nullの確認について心配する必要はありません。

46
Aaronaught

Request.IsAuthenticatedは、あなたがやろうとしていることに対して機能するはずです。

5
Esteban Araya

まず、どのような承認を使用しているかを理解することをお勧めします。 ;)

あなたが投稿した答えは正しいです。 [Authorize]属性と関連するActionFilterコードをざっと見た覚えがあることから、MVCはこれらのコード例と同じように内部的にPage.User.Identity.IsAuthenticatedを呼び出します。

1
John Farrell

次のような属性を作成します。OnActionExecutingは、アクションからの他のコードの前に最初に実行されます

     public class IsAuthenticatedAttribute : ActionFilterAttribute
        {
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
               //do your validations here. and redirect to somewhere if needed. 
                filterContext.HttpContext.Response.Redirect("/") //this will send user to home.
            }
        }

チェックする必要がある各アクションで、次のような属性を追加します。

[IsAuthenticatedAttribute]
public ActionResult ActionName(parameters?)
{
     // no need to worry about checking here.
    //do you action things
}

編集:これでもアクションは完了し、リダイレクトのみが行われます。あまり役に立ちません。

1
messed-up