WebMatrix でユーザー認証機能(4) ―― ログインとログオフ

執筆日時:

WebMatrix でユーザー認証機能(3) ―― なにはともあれユーザー登録しないと始まらん - だるろぐ で無事ユーザー登録ができ、ログインされた。という訳で今回はログアウトを実装しなければならない。

# Logout.cshtml

@{ WebSecurity.Logout();

var returnUrl = Request.QueryString["ReturnUrl"]; Response.Redirect(returnUrl.IsEmpty() ? "~/" : returnUrl); }

おわり! ほんとにこれだけだよ……。一応、 Logout?ReturnUrl=~/Account/Login なんかで ~/Account/Login へリダイレクトされるようにしてみたけど。

ちなみに、ログイン処理は少し長くなった。

# Login.cshtml

@{
var name = "";
var password = "";
var rememberMe = true;

Validation.RequireField(
"name", "You must specify an name address.");
Validation.RequireField(
"password", "You must specify a password.");

if (IsPost)
{
name = Request.Form["name"];
password = Request.Form["password"];
rememberMe = Request.Form["rememberMe"].AsBool();

if (Validation.IsValid())
{
if (WebSecurity.Login(name, password, rememberMe))
{
var returnUrl = Request.QueryString["ReturnUrl"];
Response.Redirect(
returnUrl.IsEmpty() ? "~/" : returnUrl);
}
else
{
ModelState.AddFormError(
"The user name or password is incorrect.");
}
}
}
}

<section id="login">
<form method="post">
@Html.ValidationSummary("Log in was unsuccessful." +
"Please correct the errors and try again.",
            excludeFieldErrors: true, htmlAttributes: null)

<fieldset>
<legend>Log in to Your Account</legend>
@this.RenderTextWithValidation("name")
@this.RenderPasswordWithValidation("password")
@this.RenderCheckBoxWithValidation("rememberMe")
<input type="submit" value="Log in" />
</fieldset>
</form>
<p>
<a href="~/Account/Register">Don't have a Account?</a>
</p>
</section>

f:id:daruyanagi:20120828191313p:plain

寄り道: string クラスの拡張 - だるろぐ で作ったコードのお陰で、 RenderTextWithValidation() などがシンプルになっている以外はほとんどユーザー登録の処理と変わらない感じ。

次は OAuth でログインできるようになればいいな。

ちなみに

string.AsBool や string.IsEmpty は ASP.NET Web Pages に含まれているのかな? このあたりの関数については、 ASP.NET | The ASP.NET Site でコンパクトに纏められているので、一度目を通しておくとわしみたいに車輪の再発明をせずに済むぞ!