7

私は自分のウェブサイトとブログを作成しています。初めてデータベース(私の名前とパスワード)に自分だけを登録し、後で他の人の登録をしたいのですが、最初に自分のためだけにログインし、承認を得て管理します。MSのメンバーシップは使いたくありません。最初から自分で作ってみたいので、初心者向けのガイドを探していますが、役割や権利のある大きなガイドを見つけました。ログオンデータを含むデータベースのユーザー名とパスワードを確認する小さな例が必要です。助けてくれてありがとうLibor

4

3 に答える 3

5

メンバーシップおよびロールプロバイダーのデータストアを使用したくない場合でも、認証を利用できます。私を信じてください、それはあなた自身のものを作るよりずっと簡単です。仕組みは次のとおりです。

ユーザー名とパスワードを取得するためのユーザーストレージ設定がすでに完了していると言えます。簡単にするために、データベース(または使用するストレージ)から情報を取得するためのデータ取得メソッドを含む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();

于 2010-11-05T21:03:54.953 に答える
1

@Bibo さん、メンバーシップ プロバイダーを選択しないのは良いことです。ユーザーを作成、認証するためのメソッドといくつかのメソッドを提供する UserService などで十分だと思います。提案として、ユーザーのパスワードにパスワードハッシュとパスワードソルトを使用してください。ここに良いリンクがあります。少し前に私が出したこの回答も見てください。

幸運を!

編集:代わりに、rememberMe パラメーターの名前を keepMeSignedIn にする必要があります。

于 2010-09-15T13:16:23.507 に答える
1

フォーム認証に関するこの記事では、独自の単純なセキュリティ システムを作成するための多くの情報、特に FormsAuthenticationTicket に関する情報を提供します。

http://support.microsoft.com/kb/301240

于 2010-09-27T16:03:19.307 に答える