0

Webアプリケーションに認証を追加しています。これは、asp.netmvcシングルページアプリケーションです。現在、Webアプリケーションは認証のためにasp.netmvcを使用しています。ログインページを提供するよりも認証されていない場合は、AppControllerでRequest.IsAuthenticatedを確認します(そうでない場合は、app.htmlページを保存します)。AccountControllerには、次のログオンアクションがあります。

[HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            //VALIDATE USER NAME AND PASSWORD                
            if (Repository_Security.CheckUser(model.UserName, model.Password))
            {
                FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\\\"))
                {
                    return Redirect(returnUrl);
                }
                else
                {
                    return RedirectToAction("Index", "App");
                }
            }
            else
            {
                ModelState.AddModelError("", "The user name or password provided is incorrect.");
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

実際には、ユーザー名とパスワードを取得してデータベースに対して検証するだけです。合格した場合にAuthCookieを設定するより。

私の質問は、javascriptとajaxデータ呼び出しでブラウザでこれを完全にクライアントサイドで行う場合、これは可能ですか?クライアント側のコードにチェックを追加して、ユーザーが認証されているかどうかを確認するよりも、そうでない場合はログインページにユーザーをスローしますか?

何か案は?ありがとう。

4

3 に答える 3

1

はい。MVCはクライアントサイドのAjaxでの作業に最適です。

コントローラを変更してJSONを返すことができ、jquery ajax呼び出しで、cliensidejavascriptを使用して返されたjsonを処理できます。

最後の行(return View(model))を次のように変更します

return Json(new {IsSuccess=successVariable, RedirectUrl=myRedirectUrl, Message=failedErrorMessage});

代わりにmyRedirectUrl変数を設定するようにリダイレクト行を調整します。

アップデート

プロジェクトでMVCを削除したい場合は(このような単純なタスクではやり過ぎなので)、Webサービス(asmx)をサイトに追加します。内部で次のようなWebメソッドを作成します。

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public LogonResponse Logon(LogonModel model){
    ... do login logic as your original code...
    return new LogonResponse() { IsSuccess = successVar, RedirectUrl=myRedirectUrl, Message=failedErrorMsg};
}
于 2012-10-28T21:04:33.430 に答える
0

クライアント側からもそれを行うことができます...しかし、アプリケーションが完全なセキュリティを必要とする場合、このモデルは多くのセキュリティの抜け穴を開きます。

于 2012-10-28T21:08:36.813 に答える
0

呼び出すFormsAuthentication.SetAuthCookie()と、Set-Cookieヘッダーがクライアントに返送されるため、クライアントのブラウザは認証Cookieを保存できます。このCookieのクライアント側の存在をJavaScriptで確認できます。存在する場合は続行し、存在しない場合window.location.hrefはログインページへのリダイレクト()を実行します。例:

if (document.cookie.indexOf(".ASPXAUTH") >= 0) alert("You are logged in");
else window.location.href = "http://www.domain.com/login";
于 2012-10-28T22:06:13.490 に答える