1

VS 2010 と MVC4(Razor) を使用してアプリケーションを開発しています。Url パラメーターにこだわっています。LogIn メソッドを実装できました。ユーザーを検証したら、他のページにリダイレクトしてもらいたいので、使用しています

RedirectToAction("UserAction","User",new{userID = "",password=""});

しかし、問題は RedirectToAction が HTTPTPGet を使用するため、すべての URL パラメータ userID とパスワードが表示されることです。

HTTPPost で RedirectToAction を呼び出すにはどうすればよいですか。

どんな助けでも大歓迎です。これが私のLogin.cshtmlです

@using (Html.BeginForm("SignIn", "Login", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)

<fieldset>
    <legend>Log in Form</legend>
<ol>
<li>
@Html.LabelFor(m => m.UserName)
@Html.TextBoxFor(m => m.UserName, new { id = "UserName" })
@Html.ValidationMessageFor(m => m.UserName)
</li>
<li>
@Html.LabelFor(m => m.Password)
@Html.PasswordFor(m => m.Password, new { id = "Password" })
@Html.ValidationMessageFor(m => m.Password)
</li>

</ol>   
<input type="submit" value="Log in"/>
</fieldset>
} 

そして、これが私のログインコントローラーです

bool IsValidUser = ValidateEachUser(oLoginModel.
UserName,oLoginModel.Password);           
if (IsValidUser)
return (RedirectToAction("UserDetails", "User", new { userID = userID, 
password = 
password }));
else
return View("Login");

ありがとうございます

4

4 に答える 4

1

解決策は、@anaximanderが言及したようなものです。ログインに成功したら、すべてのリクエストで送信される暗号化された Cookie (FormsAuthenticationTicket など) にユーザーの詳細を保存します。その後、Cookie を復号化することで、すべてのアクション コールで資格情報を確認できます。独自の検証プロトコルを実装する場合は、独自の AuthorizeAttribute を実装して、すべてのメソッドを手動で装飾するか、Global.asax (RegisterGlobalFilters 内) にグローバルに登録することもできます。

ただし、本当にパスワードを保持する必要があるかどうかを十分に検討する必要があります。ユーザー要求に暗号化された Cookie が含まれているという事実は、ユーザーが認証されたことを示すものとして使用できます。ユーザーが特定のアクション メソッドを実行する権限を持っていることを確認したい場合は、ユーザー ID で十分です。これにより、ユーザーがメソッドの実行を許可されているかどうかを確認する前に、パスワードを保存して呼び出しごとに再確認する必要がなくなります。

于 2013-08-28T08:48:01.030 に答える
0

メソッド HTTPPOST が必要な場合は、次のようにメソッドの先頭を置きます。

[HTTPPOST] RedirectToAction(あなたのパラメータ){}

于 2013-08-28T08:53:41.477 に答える