このコードはasp.net mvcからのものですRTMソースコード
誰がHttpContext.User.IdentityのIsAuthenticatedプロパティを設定しますか?
protected virtual bool AuthorizeCore(HttpContextBase httpContext) {
if (httpContext == null) {
throw new ArgumentNullException("httpContext");
}
IPrincipal user = httpContext.User;
if (!user.Identity.IsAuthenticated) {
return false;
}
}
メソッド(asp.net mvc 4.0サンプルプロジェクト)を呼び出して設定されたIsAuthenticatedプロパティです。
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
上記のFormsAuth ...メソッド呼び出しの後、asp.net mvc 4.0サンプルプロジェクトのLogOnメソッドのコードをデバッグすると、の実行
User.Identity.IsAuthenticated
まだFALSEを返しています。 LogOffメソッドをデバッグするときのみ
User.Identity.IsAuthenticated
tRUEは言います。では、このプロパティをTRUEおよびWHENに設定しているのは誰ですか?
[〜#〜]更新[〜#〜]:
これは[〜#〜] forms [〜#〜]認証についてです!
Asp.net mvcサンプルプロジェクトのLogOnメソッドをデバッグしました。LogOnアクションが返された後、オーバーライドしたAuthorizeCoreメソッドが呼び出され、IsAuthenticatedプロパティがTRUEになりました。
TRUEの設定は、ModelState.Value.Errorコレクションに依存しますか?
エラーコレクションでcount == 0の場合、IsAuthenticatedはTRUE、それ以外の場合、IsAuthenticatedはFALSEです。
確認できますか?
このプロパティは、フォーム認証モジュールがrequestからフォーム認証Cookieを読み取って解析することにより設定されます。あなたがこの振る舞いを観察しているのはそのためと思われるので、私はリクエストを太字にしています。説明させてください。認証が成功したときにFormsAuthentication.SetAuthCookie
を呼び出すと、認証クッキーをresponseに追加します。このCookieはクライアントブラウザーに保存され、後続リクエストで送信されます。したがって、ユーザーが認証されたと見なされるのは、後続の要求でのみです。そのため、SetAuthCookieメソッドを呼び出した後は常にリダイレクトする必要があります。このメソッドを呼び出したリクエストの内部では、ユーザーが正しい資格情報を提供したかどうかがわかっているため、IsAuthenticatedプロパティを確認する必要はありません。
プロパティの起源は、Identity
のタイプによって異なります。 FormsIdentity
の場合、プロパティはtrueを返すだけです。
/// <devdoc>
/// Indicates whether or not authentication took
/// place.
/// </devdoc>
public bool IsAuthenticated { get { return true;}}
FormsAuthenticationModule.cs
のコードは、認証後にのみFormsIdentity
を割り当てるため、これは理にかなっています。コードは非常に複雑に見えますが、Cookieからチケットを抽出しますが、チケットを検証する場所が見つかりません。