私は自分のウェブサイトとブログを作成しています。初めてデータベース(私の名前とパスワード)に自分だけを登録し、後で他の人の登録をしたいのですが、最初に自分のためだけにログインし、承認を得て管理します。MSのメンバーシップは使いたくありません。最初から自分で作ってみたいので、初心者向けのガイドを探していますが、役割や権利のある大きなガイドを見つけました。ログオンデータを含むデータベースのユーザー名とパスワードを確認する小さな例が必要です。助けてくれてありがとうLibor
3 に答える
メンバーシップおよびロールプロバイダーのデータストアを使用したくない場合でも、認証を利用できます。私を信じてください、それはあなた自身のものを作るよりずっと簡単です。仕組みは次のとおりです。
ユーザー名とパスワードを取得するためのユーザーストレージ設定がすでに完了していると言えます。簡単にするために、データベース(または使用するストレージ)から情報を取得するためのデータ取得メソッドを含むDataLayerという静的クラスがあると仮定します。
まず、ユーザーがログインできるようにする方法が必要です。したがって、ユーザー名とパスワードのフィールドを含むページを設定します。次に、ページが投稿するアクションメソッドで、クイックifステートメントを設定します。
if (DataLayer.UserExists(userModel.Username))
{
User userFromDB = DataLayer.GetUser(userModel.Username);
if (userFromDB.Password == userModel.Password)
{
FormsAuthentication.SetAuthCookie(userFromDB.Username, checkBoxRememberMe.Checked);
//Use userFromDB as the username to authenticate because it will
//preserve capitalization of their username the way they entered it
//into the database; that way, if they registered as "Bob" but they
//type in "bob" in the login field, they will still be authenticated
//as "Bob" so their comments on your blogs will show their name
//the way they intended it to.
return "Successfully logged in!";
}
}
return "Invalid username or password.";
これらが認証されたので、コードでPage.User.Identity.IsAuthenticatedを使用して、ログインしているかどうかを確認できます。次のようになります。
if (User.Identity.IsAuthenticated)
{
DataLayer.PostBlogComment(User.Identity.Name, commentBody);
//Then in your controller that renders blog comments you would obviously
//have some logic to get the user from storage by the username, then pull
//their avatar and any other useful information to display along side the
//blog comment. This is just an example.
}
さらに、フォーム認証プロバイダーを介して認証されたユーザーに対して、アクションメソッド全体またはコントローラー全体をロックアウトできます。あなたがしなければならないのはあなたのアクションメソッド/コントローラーにこれらのようなタグを追加することです:
[Authorize]
public ActionResult SomeActionMethod()
{
return View();
}
この[Authorize]
属性は、ログインしていないユーザーがそのアクションメソッドにアクセスできないようにし、ユーザーをログインページにリダイレクトします。組み込みのロールプロバイダーを使用している場合は、これと同じ属性を使用してロールをフィルターで除外できます。
[Authorize(Roles="Admin, SalesReps")]
public ActionResult SomeActionMethod()
{
return View();
}
これらの属性をコントローラークラスの上に追加して、そのロジックをコントローラー全体に適用することもできます。
編集:ユーザーをログアウトするには、電話するだけですFormsAuthentication.SignOut();
フォーム認証に関するこの記事では、独自の単純なセキュリティ システムを作成するための多くの情報、特に FormsAuthenticationTicket に関する情報を提供します。