通常、アクションは[Authorize]
で保護しますが、今回は、アクション内でユーザーが承認されているかどうかを確認する必要があります。
例えば
if(userIsAuthorized) {
//do stuff
}
else {
//return to login page
}
私は信じている 「フォーム認証」を使用しています
この質問は一種の this に似ていますが、与えられた回答のいずれも機能しないようです。
編集:私はさらに掘り下げました-[Authorize]
のあるアクションでブレークポイントを設定すると、User.Identityが設定されますが、それがないアクションでは、ログに記録されていても、User.Identityが空ですに
ユーザーがログインしているかどうかを知りたいだけの場合:
if (User.Identity.IsAuthenticated) { ... }
役割固有の何かを実行しようとしている場合:
if (User.IsInRole("Administrators")) { ... }
User
インスタンスはController
クラスのパブリックプロパティであるため、作成したコントローラーから常にアクセスできます。ログインしているユーザーがいない場合は、GenericPrincipal
にはUser
を、User.Identity
にはGenericIdentity
を設定する必要があるため、nullの確認について心配する必要はありません。
Request.IsAuthenticated
は、あなたがやろうとしていることに対して機能するはずです。
まず、どのような承認を使用しているかを理解することをお勧めします。 ;)
あなたが投稿した答えは正しいです。 [Authorize]属性と関連するActionFilterコードをざっと見た覚えがあることから、MVCはこれらのコード例と同じように内部的にPage.User.Identity.IsAuthenticatedを呼び出します。
次のような属性を作成します。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
}
編集:これでもアクションは完了し、リダイレクトのみが行われます。あまり役に立ちません。