4

ここに私の試みからのいくつかのコードがあります。それは動作しません; 「ログイン」後、ユーザーはホーム/インデックス ページにリダイレクトされませんが、ログイン ページがリロードされるだけです。

Web.config:

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" />
</authentication>

...

<defaultDocument>
  <files>
    <add value="~/Account/Login"/>
  </files>
</defaultDocument>

コントローラー/AccountController.cs:

public class AccountController : Controller
{
    //
    // GET: /Account/Login
    public ActionResult Login()
    {
        return View();
    }
}

ビュー/アカウント/Login.aspx:

<asp:Login ID="login" runat="server" DestinationPageUrl="~/Views/Home/Index.aspx">
    ...
</asp:Login>
4

2 に答える 2

11

ASP.NET MVC 4 のインターネット テンプレートを使用していますか? そうでない場合は、インターネット テンプレートを使用して新しい ASP.NET MVC プロジェクトを作成し、アカウント コントローラーを開いて、外観とメソッドを確認することをお勧めします。

@user1が正しく言ったように、これを行う方法の1つは使用することです

 FormsAuthentication.SetAuthCookie(username, true);
 return Redirect(returnurl);

しかし、あなたが言うように、ASP.NET MVC 4 を使用しています。WebSecurityクラスを使用する必要があります。

例えば ​​:

WebSecurity.Login(model.UserName, model.Password);
return RedirectToAction("Index", "Home");

ほとんどの作業は、WebSecurity ヘルパーの次のメソッドとプロパティを使用して行われます。

  • WebSecurity.UserExistsWebSecurity.CreateUserAndAccount。これらのメソッドを使用すると、誰かがすでに登録されているかどうかを判断し、登録することができます。

  • WebSecurty.IsAuthenticated . このプロパティを使用すると、現在のユーザーがログインしているかどうかを判断できます。これは、ユーザーがまだログインしていない場合にログイン ページにリダイレクトするのに役立ちます。

  • WebSecurity.LoginWebSecurity.Logout。これらのメソッドは、ユーザーをログインまたはログアウトさせます。

  • WebSecurity.CurrentUserName . このプロパティは、現在のユーザーのログイン名を表示するのに役立ちます (ユーザーがログインしている場合)。

  • WebSecurity.ConfirmAccount。この方法は、登録の電子メール確認を設定する場合に便利です。(詳細については、ASP.NET Web ページ セキュリティの確認機能を使用するというブログ記事に記載されています。)

参考文献 :

于 2012-11-06T05:44:47.167 に答える
2

フォーム認証Cookieを設定していないため、リダイレクトが機能していない可能性があります。理想的には、ログイン方法で、何らかのロジックを使用してユーザー名とパスワードを確認し、ユーザーが正当であると確信したら、フォーム認証Cookieを設定してからユーザーをリダイレクトする必要があります

FormsAuthentication.SetAuthCookie(username, true);
return Redirect(returnurl);

認証Cookieを設定しない場合、リクエストは認証されていないリクエストとして扱われ、ユーザーはログインページに戻されるため、リダイレクトは機能しません。フォームログインの詳細については、こちらをご覧ください。

http://msdn.microsoft.com/en-us/library/xdt4thhy%28v=vs.71%29.aspx

于 2012-11-05T22:27:48.137 に答える