2016-07-11 7 views
0

私のMVCアプリケーションで奇妙な認証動作が発生しました。すべてのコントローラは、[Authorize]属性で装飾されたBaseControllerを継承します。次に、ログインページで[AllowAnoymous]でアクションを装飾します。コントローラの1つのアクションがAllowAnonymousに応答しない

たとえば、ユーザーがログインしているかどうかにかかわらず、これは自由に利用できます。

[AllowAnonymous] 
public ActionResult ForgotPasswordConfirmation() 
{ 
    return View(); 
} 

私は、このコントローラのアクションから[のAllowAnonymous]属性を削除して試してみて、それに移動し、その後、私は戻って、ログインページに送信されます、と私はURLが自動的にappenedにreturnurlパラメータを持っていることを確認した場合クエリ文字列。

しかし、私は同じ属性を持つ別のコントローラのアクションを持っている:

[AllowAnonymous] 
public async Task<ActionResult> VerifyCode(string provider, string returnUrl, bool rememberMe) 
{ 
    return View(new VerifyCodeViewModel { Provider = provider, ReturnUrl = returnUrl, RememberMe = rememberMe }); 
} 

私のアプリケーションは、絶対にそれは[のAllowAnonymous]で飾られていますにもかかわらず、ログインしていないユーザーのために、このビューをレンダリングしません。私はなぜ私の人生のためには理解できません。しかし、私はあなたがそれを試してみると、ReturnUrlは生成されないことに気がつきました。

匿名ユーザーが許可されているはずなので、これは期待していると思います。しかし、そうではありません。私は、AllowAnonymousの有無にかかわらず、スケルトンコントローラアクション/ビューを作成しようとしましたが、期待通りに動作します。

私はフィルタまたはカスタム属性を使用していません。この1つの行動がこのような特異なやり方で行動する原因は何でしょうか?

+0

'VerifyCode'メソッドの中にブレークポイントを置くと、ヒットしますか? – haim770

+0

@haimはい。私はその問題をViewのレイアウトに追跡することができました。 nullに設定すると、コントローラーアクションが機能します。回答者には正しい答えがあると思います –

答えて

2

あなたのVerifyCode.cshtmlカミソリビューの中に子のアクションを呼び出すかどうかを確認します。これは匿名ユーザーには許可されていません。

関連する問題