私はこれを作るのにいくつかの困難があります。
ログイン HTML フォームがあり、ユーザーとパスワードが MySQL サーバーの情報と一致するかどうかを知りたいです。
それを行う最良の方法は何ですか?
どうもありがとうございました
この質問は少し古いことは知っていますが、後世のために答えたいと思いました。
いくつかのオプションがあると思います。
1 つのオプションは、パスワードの検証に HTML::Mason をまったく使用しないことです。これは私たちがかつて行っていたことです。HTML::Mason ページは Web サーバー内で実行されている可能性が高いため、おそらくそれを使用してユーザー名とパスワードの検証を行うことができます。たとえば、サイトにサービスを提供するために Apache と mod_perl を使用している場合、MySQL と対話し、ユーザー名とパスワードの列を持つユーザー テーブルに対して検証できるモジュールなど、認証用のモジュールがいくつかあります。Apache 2.2のmod_authn_dbdのドキュメントを確認してください。このアプローチをお勧めします。
それを行う別の方法は、Catalystのようなフレームワークを使用することです。Catalyst には、必要な種類の認証を行うためのプラグインが既に用意されており、Mason で 100% 試してみると、自分でコーディングする必要があるほとんどの問題について考える必要がなくなります。ページ テンプレートには HTML::Mason を引き続き使用できます。
HTML::Mason を使用して認証を行うことに心当たりがある場合は、次のようにします。
保護したいフォルダーにオートハンドラーを配置します -- すべてのサブフォルダーが同じ認証保護を受けることに注意してください
オートハンドラの <%init> ブロックで、Cookie に有効なセッション トークンがあるかどうかを確認します。存在しない場合は、ログイン フォームにリダイレクト ($m->redirect) します。それ以外の場合は、何もしません。オートハンドラは引き続き実行され、ページは提供されます。
ログイン フォーム ハンドラーで、 <%args> ブロック内のユーザー名とパスワードを抽出します。ユーザー名を使用して、ハッシュされたパスワードをデータベースから取得します。ソルトを抽出し、ユーザーが提供する平文のパスワードの前に追加して、再ハッシュします。次に、ハッシュ文字列を比較します。一致しない場合は、エラーが発生してログイン ページにリダイレクトされます。それ以外は通過。
上記の一部が意味をなさない場合は、このサイトで「パスワードの塩漬け」などを調べてください。元の返信者が指摘したように、プレーンテキストのパスワードをデータベースに保存するのは悪いカルマです。:-)
DBIを使用してMySQLに対してユーザー名とパスワードの組み合わせを検証し、%ARGSハッシュでユーザー名とパスワードが渡された場合にtrueまたはfalseを返すMasonコンポーネントを作成します。次に、戻り値を使用してログインフォームの上部にコンポーネントをロードし、ログインフォームを表示するか、コンテンツにリダイレクトするかを決定します。
パスワードのハッシュ値を常に保存します。ユーザー資格情報を検証する必要がある場合は、ユーザーが入力したパスワードをハッシュし、特定のユーザーに対応するハッシュされたパスワード値と比較します。