PlayFramework(Java)でFacebook認証

こんにちは!!
前回に引き続きPlayFrameworkに関して。
今回はPlayFrameworkのライブラリを使って、FacebookをOAuth認証させたいと思います。

開発環境

  • PlayFramework2.4
  • Java8
  • 認証ライブラリ:pac4j v1.9
  • FacebookAPI v2.8
今回利用するpac4jというライブラリは認証を簡単にできるライブラリで
ここに書いてある通りに書けば、
問題なく動作はします!!

が、今回は1点問題があり、動作がしなくなったので、
その解決策を書いていきます。

問題点

FacebookAPIのバージョンが新しすぎて、ユーザーのプロフィール情報を取得する為のプロパティが変わってしまった。
facebook for developersにこのように書かれています。 現在、pac4jではbioを取得してきているので、そこをaboutに変更しないとダメということだそうです。
このbioの取得が任意ならよかったのですが、認証時に必ず取得して来てしまうプロパティなのです。

認証ライブラリを書き換える

今回書き換えるクラスは2つ!!
  • FacebookAttributesDefinition.java
  • FacebookClient.java
です。
2つのクラスの変更する箇所はこちら!!

FacebookAttributesDefinition.java

41行目くらいにBIOプロパティを宣言しているので、そこをaboutに書き換えてしまいましょう!!

FacebookClient.java

55行目くらいにフィールドを宣言している中にbioという文字があるので、そこをaboutに変更!! これらに加えて、FacebookProfile.javaというクラスをライブラリから独立させて
自分のプロジェクトに加えると
今までbioを取得していたものがaboutを取得するようになります!!

今回の反省

FacebookAPIを利用するときは開発をする時にバージョンと仕様を確認して、利用するライブラリを決めないといけないです。
外部APIに依存しすぎるのはよくないですが、Facebook認証は強力なので、
変更に臨機応変に対応するしか無いですね。。。

PlayFramework(Java)で開発環境と本番環境の違いで苦労した

こんにちは。
前回、dafさんがplayframworkでメールを送信してみた!
というタイトルで
PlayFrameworkの記事を書いていたので、
その流れに乗ってPlayFrameworkについて書きたいと思います。
タイトル通り開発環境と本番環境の違いから苦労した点を書きます。

今回の苦労した点は

conf/内のファイルが読め込めない!!

というもの。

やりたいこととしては、
conf/内に何かしらのファイルを置いておいて、
application.confに記述したパスを参照して、Javaで読み込むというもの。
(PlayでJava?という気持ちは内にしまっておいてください。。。)

開発環境で動作させるrunやstartですと問題ないのですが、
本番環境で運用する為のstageやdistをして実行すると読め込めないという状況が起きました。

まずは、

開発環境で動作したコード

このコードで実行すると、
ファイルが見つかりません。

ConfigFactory.load()を利用すると、
デフォルトでapplication.confを読みにいくのですが、
runやstartと違って
stageやdistしたパッケージ内には
conf/が存在していないのでパスが違ってエラーになります!!

ではどうしたものか・・・
色々調べてみると、
便利なものが存在しました!!
play.Application.getFile(String relativePath)

このメソッドはアプリケーションのルートパスからの相対ファイルを取得するというもの。
アプリケーションのルートパスの参照ならconf/も存在するので、
ファイルも取得出来る!!

それでは、

本番環境でも動作したコード

これでファイルを取得出来ました!!
因に、application.confに記述するパスは
conf/path
となります。

これ以外にも開発環境と本番環境では異なってくる箇所があるので、
徐々に書いていきたいと思います。