0

In the authentication control I have the following line to mark a user as authenticated in the system (after checking out the password):

FormsAuth.SignIn(userName, rememberMe);

and if I redirect, which is the standard behvaior, everything is ok. But if I show a view right away, the usual ways to check whether a user is authenticated:

Page.User.Identity.IsAuthenticated
Request.IsAuthenticated

don't work. They say the user is not authenticate. How can I make the authentication effective immediately or is there another way to check that would allow me to find out when the user just logged in?

4

3 に答える 3

3

FormsAuth.SignInVisual Studio から新しい ASP.NET MVC プロジェクトを作成するときに生成される関数です。

その関数はFormsAuthentication.SetAuthCookieを呼び出すだけで、ドキュメントによると、 responseに認証 Cookie を設定します。

これは、リダイレクトすると機能する理由を説明していますが (クライアントは後続のリクエストで Cookie を再生するため)、呼び出しの直後では機能しません。

リダイレクトはこれを行うための正しい/従来の方法ですが、リダイレクトの前に認証を確認することを絶対に主張する場合は、セッション状態で IsAuthenticated フラグを作成し、確認時にそれを参照できます。

于 2009-06-01T21:30:44.033 に答える
0

FormsAuth.Signin または FormsAuthentication.SetAuthCookie を使用するだけでなく、サインイン コードの実行時にサインイン コントロールで User.Identity を手動で設定することもできます。上記のように、その理由は、FOrmsAuth.SignIn が Request_OnAuthenticate イベントで次回取得されるように認証 Cookie を設定するだけだからです。(これは単に Cookie をデコードし、HttpContext.User プロパティを設定します)

于 2010-10-11T02:19:20.260 に答える
0

コントローラーでは、以下を使用して、認証されているかどうかを確認できるはずです。

User.Identity.IsAuthenticated;

ページからページに移動するときに AccountController が Principal オブジェクトを適切に保存していることを確認します。

于 2009-06-01T20:57:59.480 に答える