Play2.3でSecureSocialを使う(2014年6月時点)

※(2014年6月27日)この情報はすでに古く、Play2.3に対応した公式モジュールがリリースされている可能性があります。公式サイトやリポジトリをご確認ください。

PlayFrameworkに認証/認可機能を追加できるSecureSocialというモジュールがあります。

SecureSocialの特徴は以下のとおりで、必要とされている機能はひと通り用意されており、認証機能を手軽に構築できるモジュールです。(ほぼ上記ページの内容ですが。)

  • ScalaだけでなくJavaでも使える。
  • Play2だけでなくPlay1でも使える。
  • ユーザ/パスワード認証だけでなく、OAuth1,2やOpenIDにも対応。また、TwitterFacebookなど向けのモジュールも用意されている。
  • 既存アプリへの組込みも簡単。
  • 拡張性があり、新たな認証にも対応できる。
  • ユーザ登録時やパスワードリセット時などにメールを送信する機能が使える。

さて、このモジュールですが残念ながら現在(2014/06/27)時点でPlay2.3向けのモジュールが提供されていません。 現在の状況としては、PRは投げられていますがメイン開発者が他の機能に注力しているため、レビュー・取り込みされていません。

ですが、PR元のプロジェクトをsbtで参照することで、Play2.3に対応したSecureSocialが使えますので、今回はその手順をまとめてみました。

  1. Playプロジェクトを作成する
  2. Play2.3対応版SecureSocialをプロジェクト参照する

1. Playプロジェクトを作成する

まずは、空のプロジェクトを作成してきます。Play2.3からはplayコマンドではなく、Typesafe Activatorを利用してプロジェクトを作成するように変更されていますのでご注意ください。 今回は、play23-securesocialというプロジェクト名でplay-scalaというテンプレートを利用して作成します。

> activator new play23-securesocial play-scala

Typesafe Activatorとは?

Typesafe Activatorとは、Scalaプロジェクトをあらかじめ用意されたひな形を利用して作成できるツールです。実際には、Webからソースコードを編集するUIなども用意されているようですが、ここでは説明しません。

Typesafe Activatorをインストールしていない方は、公式サイトZIPファイルをダウンロードし、任意の場所に展開します。 その後、実行ファイルにPATHを通せばactivatorコマンドが利用できるようになります。

Typesafe Activatorをインストールしたくない!

Typesafe Activatorをインストールしたくない方は、@xuwei_kさんがズバリのブログ記事を公開していますので、そちらを参考にしましょう。

ただし、この記事ではTypesafe Activatorを利用して作成したプロジェクトを元に話を進めます。build.sbtの中身がTypesafe Activatorを利用した場合と@xuwei_kさんの記事とで若干異なりますのでご注意ください。

2. Play2.3対応版SecureSocialをプロジェクト参照する

プロジェクトが作成できましたので、Play2.3に対応したSecureSocialを参照するように設定します。

といっても、冒頭に記載したとおりPlay2.3に対応したモジュールはまだリリースされていませんので、libraryDependenciesでは参照できません。そのため、GitHubリポジトリを直接参照するように、build.sbtを書いていきます。

//build.sbtの一部
lazy val root = (project in file(".")).enablePlugins(PlayScala)
  .dependsOn(ProjectRef(uri("https://github.com/ewiner/securesocial.git#play-2.3"), "mainModule"))

dependsOn以降を追加することにより、uriで指定した、Play2.3対応SecureSocialのGitプロジェクトが参照されます。

まとめ

Play2.3対応のSecureSocialについて調査していたところ、上記の方法で使えるという情報があったのでまとめてみました。 それより、sbtにGitプロジェクトを直接参照する機能があることを知らず感動しました。知らないことはまだまだいっぱいありますね・・。

認証/認可に必要な機能はひと通り揃っているモジュールですので、興味のある方はSecureSocialを使ってみてください。