既存のデータベースでMembership APIを使用する

画像

現在、ユーザーの許可なしに、少量のインターネットリソースが不要になっています。 したがって、トレーニングの開始時に、このメカニズムを実装するためにASP.NETの機能を理解する必要がありました。 少し後に、Membership APIの存在について学び、それを使用することにしました。 幸いなことに、Webサイト管理ツールの助けを借りてVisual Studioを使用すると、基本的な設定を使用して、すべての作業を簡単に構成できます。 必要なのは、フォームを使用して認証方法を選択し、ユーザーを作成することだけです。その後、必要なテーブル構造を持つデータベースファイルがApp_Dataディレクトリに配置されます。 トラブルを知らずに、長い間喜んで使っていました。 これまでのところ、ある晴れた日、承認が当初意図されていなかった既存のプロジェクトを少しやり直す必要はありませんでした。



ユーザーとの作業は計画されていなかったので、私は大胆にデータベースを入手し、必要なテーブルでそれを埋め、徐々にプロジェクトを開発しました。 プロジェクトは少しずつ成長し始め、ある時点で認証メカニズムを実装することにしました。 習慣から、私はWATに行き、ユーザーを取得し始めました。 Studioは、通常どおりaspnetdb.mdfという名前のデータベースファイルを正常に作成しました。 しかし、これは私が必要なものではありません。 もちろん、このデータベースを認証に使用し、前のプロジェクトのテーブルを使用できましたが、データベース間で外部キーを使用できなくなり、本当に実装したかった機能の多くが失われます。

それから少し戸惑った私は壁にぶつかった。 私はこの問題へのアプローチ方法を知りませんでした。 1つのオプションは、古いデータベースから新しいデータベースにテーブルを転送することでしたが、このオプションは好きではありませんでした。 別の解決策があるはずだと確信しました。 インターネットで少し騒ぎ立てて、aspnet_regsql.exeツールを使用する必要があることを知りました。 パラメータなしで起動する場合、ウィザードの機能を使用できます。 ウィザードだけがSQL Expressサーバーを表示しません。私の場合、使用されるのは彼です。 コマンドラインパラメーターを解析する必要があり、次のコマンドが生成されました。



aspnet_regsql.exe –A all –C "Data Source=.\SQLEXPRESS;Integrated Security=True;User Instance=True" –d "D:\aspnet_projects\myproject\App_Data\myolddbname.mdf"







ここで:

-Aアプリケーションサービスをインストールします。 有効なオプション:all-すべてのサービスのインストール用、 m-メンバーシップ用、 r-役割サービス、 p-ユーザープロファイルのサポート用、 c -Webページの一部のパーソナライズ。

-C完全な接続文字列を指定できます。

-d必要なサービスをインストールするデータベースの名前。



コマンドを適用した後、ユーザーと作業するために生成されたテーブルが古いデータベースに表示されました。 この便利さに満足して、私は再びWATに走って最初のユーザーを登録しました。 当然、失敗は再び私を待っていました。

後で判明したように、私のWebアプリケーションのweb.configでメンバーシッププロバイダーを構成する必要があります。 <system.web>セクションに適切なコードを配置する必要があるのはなぜですか。



<membership defaultProvider="MyMembershipProvider">

<providers>

<add name="MyMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="MyConnectionString" applicationName="/" />

</providers>

</membership>







したがって、プロバイダーの名前と接続文字列を指定しました。 今回は、ユーザーが正常に作成され、データベースに配置されました。 次に、ユーザー認証を使用して、既に正常にプロジェクトを開発し続けました。



この記事は初心者に適しています。 経験豊富な開発者が自分で新しい何かを発見することはまずありません。



XaocCPSに感謝します



All Articles