ASP.NET MVC における認証
ASP.NET MVCでは従来のASP.NETのMembership機能などが利用できます。Preview 3まではちょっとした工夫が必要でしたが、Preview 4からはプロジェクトテンプレートでMembership機能を利用した”AccountController
クラス”というControllerクラスと、”Views/Account”というViewPageが追加されました(図1)。これにより、ユーザーはプロジェクトを起動するだけで、認証機能を実装できます(図2~5)。
このままでも利用できてしまいますが、どのように認証が実装されているのかLogin
メソッド部分を解説します。
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
namespace SampleMVCPreview4.Controllers
{
[HandleError]
public class AccountController : Controller
{
<中略>
// アプリ名.Controllers.IFormsAuthenticatiインターフェイス
// の設定
public IFormsAuthentication FormsAuth
{
get;
private set;
}
// System.Web.Security.MembershipProviderの設定
public MembershipProvider Provider
{
get;
private set;
}
<中略>
public ActionResult Login(string username,
string password, bool? rememberMe)
{
ViewData["Title"] = "Login";
// ポストリクエスト以外は、Loginフォームを表示する
if (Request.HttpMethod != "POST")
{
return View();
}
// パラメタ確認
List<string> errors = new List<string>();
if (String.IsNullOrEmpty(username))
{
errors.Add("You must specify a username.");
}
if (errors.Count == 0)
{
// ログイン認証開始
bool loginSuccessful
= Provider.ValidateUser(username, password);
if (loginSuccessful)
{
// 認証成功時HomeControllerのIndex
メソッドへ
FormsAuth.SetAuthCookie(username,
rememberMe ?? false);
return RedirectToAction("Index", "Home");
}
else
{
// 認証失敗時errorsリストにエラーメッセージ追加
errors.Add("The username or password provided" +
"is incorrect.");
}
}
// もし、以下の項目が表示されたのであれば認証失敗で、
// 同一ページにエラー内容が表示
ViewData["errors"] = errors;
ViewData["username"] = username;
return View();
}
ごらんの通り、認証部分でASP.NETのMembership機能を利用していることが確認できました。ユーザー登録やパスワード変更、ログアウトに関しても同様にMembership機能を利用して実装しています。また、登録ユーザーはASP.NET 構成ページにて確認できます(図6 )。
なお、認証によるページ閲覧やロールの設定については、後述するAuthorize属性で活用できます。