私はこれを単純化しすぎているかもしれませんが、これを読む方法は次のとおりです。
- ユーザーが認証されていない場合は、ユーザー名/パスワードを収集するフォームがあります
- そのフォームの結果は、承認のために Web サービスに渡されます。
- その承認が成功した場合、サインインしたことを Web アプリケーションに知らせる方法が必要です。
- それらが認証されている場合は、何かを行います
上記が正しければ、メンバーシップ プロバイダーは必要ありません。[Authorize] 属性は、フォーム認証 Cookie が設定されているかどうか、および Cookie の現在の有効期間が有効であるかどうかを確認するだけです。この認証 Cookie は、ユーザーのユーザー名と Cookie の有効期限 (およびその他のものですが、ここでは重要ではありません) を保存します。
そのため、web.config 構成要素を設定し、認証 Cookie を設定する方法を用意するだけで済みます。
Web.Config
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
</system.web>
ログオン URL GET アクション
public ActionResult Logon(){
//if the user is logged in, send the to the home page
if(httpContext.User.Identity.IsAuthenticated_{
Return RedirectToAction("Index", "Home");
}
Return this.View(new LoginViewModel());
}
ログオン URL POST アクション
[HttpPost]
public ActionResult Logon(LoginViewModel model){
//Check for model errors
if(!ModelState.IsValid()){
Return this.View(model);
}
//Validate against web service - return error if false
if(!CheckClientsWebService(model.UserName, model.Password)){
ModelState.AddModelError("","The username or password is invalid");
Return this.View(model);
}
//Manually set the authentication cookie
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
//Send them on to the home page, they now have a authorization cookie
Return RedirectToAction("Index", "Home");
}
関数を.SetAuthCookie()
呼び出すと、ユーザーは認証チケットをHttpContext.User.Identity.IsAuthenticated
取得し、Cookie の有効期限が切れておらず、ユーザー名を取得できる限り、への呼び出しは true になります。HttpContext.User.Identity.Name