トップ回答者
ASP.NET Identityでユーザーログイン後でしかアクセスできないページを作成したい

質問
-
visual studio express 2013 for webからmvcテンプレートで勉強しています。
テンプレートのユーザー登録画面でユーザーを作成し、ログイン・ログアウトは出来るのですが
特定のページをログインしていなければ別ページに遷移する方法が分かりませんでした。
詳しく載っているようなサイト等をご教授できないでしょうか。~追記~
諸説調べ、以下のサイトを観ながらロールによるアクセス制限を行ってみました。
ASP.NETでRoleを用意する
http://blog.qaramell.com/?p=14101
どうやら下記実装で制御可能でした
[Authorize(Roles = "ここにロール名")]
AspNetRolesとAspNetUserRolesがどう結びついているのかを調べればなんとかできそうなのですが、AspNetRolesとAspNetUserRolesの単語で調べてみても詳しく載っているサイトが見つからず、という状態です。
- 編集済み s_tsurumaki 2014年11月15日 18:30
回答
-
> ロールによるアクセス制限を行ってみました。
ログインできた(認証が通った)だけではアクセスを許可せず、さらにロールによるアクセス制限(認証後さらに承認されたユーザーのみアクセスを許可する)も行いたいということですか?
質問さんは、先の私のレス「認証を受けてない(ログインしていない)ユーザーが、匿名アクセスの許可されてない特定のアクションメソッドにアクセスしたとき、ログインページにリダイレクトされるということでいいのですか?」に、
> SurferOnWww様のおっしゃる通りの事を実現したいと思っております。
と返信されてますが、それとちょっと(かなり?)違うことは理解されているでしょうか?
上で「匿名アクセスの許可されてない・・・」というのは、逆に言えば、ログインしていれば(認証されていれば)誰でもアクセス可能ということで、そこまででよければロールによる制限(承認)は不要という意味なのですが。
認証だけでよければ、コントローラーのクラスまたは個々のアクションメソッドに [Authorize] 属性を付与すれば匿名ユーザーのアクセスは制限できます。
そうではなくて、認証に加えてロールによる承認も行いたいということですか? まずそのあたりを明確にしてください。
【追伸】
認証だけなら、Visual Studio のテンプレートで自動生成される AccountController.cs のコードが参考になりませんか?
たぶん、以下のようになっていると思いますが、[Authorize] 属性をコントローラーのクラスに付与してクラス全体の匿名ユーザーのアクセスを不許可にした上で、Login など匿名ユーザーのアクセスを許可するアクションメソッドのみ [AllowAnonymous] 属性(匿名ユーザーの許可)が付与されているはずです。
namespace MvcApplication1.Controllers { [Authorize] [InitializeSimpleMembership] public class AccountController : Controller { // ・・・中略・・・ [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { // ・・・中略・・・ } // ・・・中略・・・ } }
上記とは逆に、クラスには [Authorize] 属性を付与せず、匿名ユーザーのアクセスを許可しないアクションメソッドのみに [Authorize] 属性を付与して制限することもできます。- 編集済み SurferOnWww 2014年11月16日 3:52 追伸追加&誤字訂正
- 回答としてマーク s_tsurumaki 2014年11月17日 18:11
すべての返信
-
visual studio express 2013 for webなのでMVC5ですよね?
この辺り、あまり実装経験がなく知識だけなので外しているかもしれませんが、以下が参考になりそうに思います。ASP.NET MVC 5 で追加された IAuthenticationFilter と Authorize 属性の関係
http://blog.shibayan.jp/entry/20130627/1372344222★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
-
> 特定のページをログインしていなければ別ページに遷移する方法が分かりませんでした。
上記の意味がよく分かりません。
まず MVC には Web Forms で言うページはないのですが、質問の「特定のページ」というのはコントローラーの特定のアクションメソッドということですか?
で、認証を受けてない(ログインしていない)ユーザーが、匿名アクセスの許可されてない特定のアクションメソッドにアクセスしたとき、ログインページにリダイレクトされるということでいいのですか?
- 編集済み SurferOnWww 2014年11月9日 4:06 誤記訂正
-
> ロールによるアクセス制限を行ってみました。
ログインできた(認証が通った)だけではアクセスを許可せず、さらにロールによるアクセス制限(認証後さらに承認されたユーザーのみアクセスを許可する)も行いたいということですか?
質問さんは、先の私のレス「認証を受けてない(ログインしていない)ユーザーが、匿名アクセスの許可されてない特定のアクションメソッドにアクセスしたとき、ログインページにリダイレクトされるということでいいのですか?」に、
> SurferOnWww様のおっしゃる通りの事を実現したいと思っております。
と返信されてますが、それとちょっと(かなり?)違うことは理解されているでしょうか?
上で「匿名アクセスの許可されてない・・・」というのは、逆に言えば、ログインしていれば(認証されていれば)誰でもアクセス可能ということで、そこまででよければロールによる制限(承認)は不要という意味なのですが。
認証だけでよければ、コントローラーのクラスまたは個々のアクションメソッドに [Authorize] 属性を付与すれば匿名ユーザーのアクセスは制限できます。
そうではなくて、認証に加えてロールによる承認も行いたいということですか? まずそのあたりを明確にしてください。
【追伸】
認証だけなら、Visual Studio のテンプレートで自動生成される AccountController.cs のコードが参考になりませんか?
たぶん、以下のようになっていると思いますが、[Authorize] 属性をコントローラーのクラスに付与してクラス全体の匿名ユーザーのアクセスを不許可にした上で、Login など匿名ユーザーのアクセスを許可するアクションメソッドのみ [AllowAnonymous] 属性(匿名ユーザーの許可)が付与されているはずです。
namespace MvcApplication1.Controllers { [Authorize] [InitializeSimpleMembership] public class AccountController : Controller { // ・・・中略・・・ [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { // ・・・中略・・・ } // ・・・中略・・・ } }
上記とは逆に、クラスには [Authorize] 属性を付与せず、匿名ユーザーのアクセスを許可しないアクションメソッドのみに [Authorize] 属性を付与して制限することもできます。- 編集済み SurferOnWww 2014年11月16日 3:52 追伸追加&誤字訂正
- 回答としてマーク s_tsurumaki 2014年11月17日 18:11