SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Webアプリケーションフレームワーク「Catalyst」入門

初めてのCatalyst入門(12)
ログイン/セッション管理

セッション管理、ユーザー認証、PSGI/Plack

  • X ポスト
  • このエントリーをはてなブックマークに追加

ユーザ認証を行う

 次に、ログイン用のフォームなどを使用して、Webアプリケーションのユーザ認証を助けてくれるプラグインである、Catalyst::Plugin::Authenticationを紹介します。

 こちらについても、セッション管理と同様に「認証手段」と「ユーザ管理」の方法をさまざまなプラグインから選択できるようになっています。

 それぞれ、Catalyst::Authentication::CredentialとCatalyst::Authentication::Storeネームスペース以下にさまざまな手法によるプラグインが容易されています。

 ネームスペースから「Plugin」がなくなっていますが、これはCatalyst::Plugin::Authenticationの0.10以降からこちらのネームスペース以下に実装されるようになっていますのでご注意ください。

 また、ユーザ認証については、Catalyst::Plugin::Authentication::InternalsCatalyst Tutorial - Chapter 5: Authenticationに仕組みの解説、チュートリアルなどがまとまっていますので、詳細を知りたい方はぜひとも読んでみてください。

さまざまな認証手段

 認証手段を提供するプラグインは、Catalyst::Authentication::Credentialネームスペース以下も定義されています。その中でも主要なプラグインには次のようなものがあります。

主要なCatalyst::Authentication::Credentialプラグイン
Plugin名(Catalyst::Authenticationを省略) 説明
Credential::Password パスワードによる認証
Credential::HTTP HTTPのベーシック認証/ダイジェスト認証
Credential::Kerberos Kerberosサーバによる認証
Credential::OpenID OpenIDによる認証
Credential::OAuth OAuthによる認証

 ここで紹介したもの以外でも、FlickrやFacebookのユーザ認証を使用できるプラグインが公開されています。

さまざまなユーザ管理

 ユーザ管理を行うためのプラグインは、Catalyst::Authentication::Storeネームスペース以下に定義されています。その中でも主要なプラグインには次のようなものがあります。

主要なCatalyst::Authentication::Storeプラグイン
Plugin名(Catalyst::Authenticationを省略) 説明
Store::Htpasswd .htpasswdファイルによる管理
Store::DBI DBIを使用したデータベースによる管理
Store::DBIx::Class DBIx::Classを使用したデータベースによる管理
Store::LDAP LDAPサーバによる管理

 さらに詳細を見ていくと、Storeプラグインには、ユーザ情報を保存するためのストレージとの仲立ちをするためのバックエンドモジュールと、ユーザ情報を管理するためのユーザオブジェクトクラスの2つが用意されています。

 このユーザオブジェクトは、Catalyst::Authentication::Userから継承しています。

その他のプラグイン

 Webサイトによっては、ユーザによって閲覧できるページを制限したい場合などが出てきます。もちろんユーザ単位で制限をかけることもできますが、ユーザ数が増えてくるといちいち閲覧可能なユーザを管理する手間が増えてきて、運用に支障が出てき始めます。

 一般的にはユーザをグループ化し、そのグループごとに権限を付与することでアクセス権限(Role)の管理を簡単にします。

 Catalystでは、Catalyst::Plugin::Authorization::Rolesを使用することで、このような機能を実現することができます。

ユーザ認証機能をインストール/設定する

 今回のサンプルでは、ユーザ管理にCatalyst::Authentication::Store::Htpasswdを、認証手段としてはCatalyst::Authentication::Credential::Passwordを使うことにします。

 それぞれのプラグインをインストールしましょう。

リスト9 Catalyst::Authentication::Store::Htpasswdのインストール
# perl -MCPAN -e 'install Catalyst::Authentication::Store::Htpasswd'
リスト10 Catalyst::Authentication::Credential::Passwordのインストール
# perl -MCPAN -e 'install Catalyst::Authentication::Credential::Password'

 次にこれらのプラグインを設定しますが、セッション管理の場合と異なり、プラグインの登録部分ではAuthenticationだけを記述し、CredentialとStoreに関する設定は、configで行います。

 設定箇所は次のようになります。

リスト11 Authenticationプラグインの登録および設定(AppSample.pmの一部)
# 省略
use Catalyst qw/
  -Debug
  ConfigLoader
  Static::Simple
  Session
  Session::State::Cookie
  Session::Store::File
  Authentication
/;
# 省略
__PACKAGE__->config(
  # 省略
  # ユーザ認証関連のパラメータ登録
  'Plugin::Authentication' => {
    use_session => 1,
    default_realm => 'default',
    default => {
      # (1)Credentialの設定
      credential => {
        class => 'Password',
        password_field => 'password',
        password_type => 'self_check',
      },
      # (2)Storeの設定
      store => {
        class => 'Htpasswd',
        file => 'sample_htpasswd',
      },
    },
  },
);

 (1)では、Catalyst::Authentication::Credential::Passwordを使うための設定をしています。classに設定する値を切り替えることで、他のCredentialモジュールを使用できるようになります。

 password_fieldには、ユーザオブジェクトでパスワードを含むフィールド名を指定します。一般的には「password」が使用されますが、ユーザ情報を管理するモジュールによっては異なる場合もあります。

 password_typeには、パスワードの種類を指定します、パスワードが平文で入っている場合、暗号化されている場合、ハッシュ化されている場合などさまざまなケースに対応できるようになっています。ここではStoreモジュールとしてHtpasswdを使用しているため、Credentialモジュール側ではなく、Storeモジュールが返すユーザオブジェクトのcheck_password()メソッドを呼び出すことを意味する値(self_check)を指定しています。

 (2)では、Catalyst::Authentication::Store::Htpasswdを使うための設定をしています。ここでもclassには使用するStoreモジュールを指定します。

 Htpasswdモジュールではユーザ情報の管理方法としてhtpasswdファイルを使用することから、「file」の値として、実際に用意するhtpasswdファイルを指定します。

 次に、ユーザ管理で使用するhtpasswd形式のファイルを作ります。ファイル名は上記で指定した「sample_htpasswd」として、最初のアカウントを登録しましょう。このサンプルではパスワードとして「1234」を使用しました。

リスト12 sample_htpasswdファイルの作成
$ htpasswd -c ~/AppSample/sample_htpasswd hanada

次のページ
ログイン機能を実装する

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Webアプリケーションフレームワーク「Catalyst」入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 花田 善仁(ハナダ ヨシヒト)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5648 2011/01/07 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング