ブログトップ 記事一覧 ログイン 無料ブログ開設

Road To Nowhere

2012-02-02

Symfony2のログインに関するメモ

| 01:22 | Symfony2のログインに関するメモを含むブックマーク

Symfony2で会員登録機能を開発していてハマったことがあったのでメモ。


Symfony2のセキュリティ機能はけっこう素晴らしくて簡単にログイン機能(ユーザーの認証と承認)を使うことができる。

セキュリティ | Symfony2日本語ドキュメント

このページをじっくり読みながらやればそれほど困ることはないと思う。


今回ハマったのは会員登録機能を開発しているときのこと。

ユーザーが会員登録のステップを終了した後、ログインフォームを経由せずにログインした状態にしてマイページへ遷移するという実装をしたかった。

このやり方がなかなか見つからなかったが、ようやく英語でいくつか発見。

symfony 2.0 - Symfony2: How to log user manually? - Stack Overflow

php - Automatic post-registration user authentication - Stack Overflow

(最近、stackoverflowがよく検索にひっかかっるな)

$securityContext = $this->get('security.context');
$token = new UsernamePasswordToken($userEntity, null, 'secured_area', $roles);
$securityContext->setToken($token);

実際に実装したのはこんな感じ。

詳しくは英語で書いてあるけどいちおう注意点を言っておくと、UsernamePasswordToken()の2番目の引数はnullでOK。3番目の引数は'secured_area'はsecurity.ymlのfirewallsで設定している文字列このドキュメントの例にならっているのであれば'secured_area'でOKだった。


2012/2/17、symfony2 ver2.0.10で再検証したところ、上記対応でセッションが永続されたので以下の対応不要です。

バージョンアップの影響から以前の検証方法が悪かったのかは調べていません。

さて、これで確かにログイン状態にすることはできたのだが、どこか他のページに遷移するとログイン状態を維持できない。

まさかセッションにuserのidをもっておいて毎ページで上記の処理をするわけにもいかないので調査続行。

最終的には上記のsetTokenのあと、下記のようにセッションに$tokenを保存してやれば、ログイン状態を維持できた。

$request = $this->getRequest();
$session = $request->getSession();
$session->set('_security_secured_area', serialize($token));

'_security_secured_area'の「secured_area」の文字列は、こちらも上と同様、security.ymlのfirewallsで設定している文字列


調査にけっこう時間とられてしまったので、覚えておくと幸せになれるかも。

トラックバック - http://d.hatena.ne.jp/kazumaryu/20120202

2011-12-01

Q4Mインストールメモ

| 08:26 | Q4Mインストールメモを含むブックマーク

Q4Mインストールしようとして調べたところたくさんの情報が見つかったけど、

みなさんけっこう苦労されていて、さらに解決方法も各々で定まっていない様子。

傾向として、MySQLQ4Mをソースからインストールすると手こずるようだったので、

MySQLrpmインストール後、Q4Mバイナリ版をMySQLに組み込むという方法でインストールした。


環境

  • CentOS 5.7
  • Q4M 0.9.5
  • MySQL 5.1.55 (2011/11/30現在、Q4M 0.9.5が対応している最新)

MySQLインストール

MySQL5.1.55のrpmを以下のページからGET。

MySQL :: MySQL Product Archives

最低限必要なのは「MySQL-server-community-xxx」と「MySQL-client-community-xxx」

それとunameなどを見て環境に合ったものを選択。

wget http://downloads.mysql.com/archives/mysql-5.1/MySQL-server-community-5.1.55-1.rhel5.x86_64.rpm
wget http://downloads.mysql.com/archives/mysql-5.1/MySQL-client-community-5.1.55-1.rhel5.x86_64.rpm

rpmコマンドでインストール

rpm -i MySQL-server-community-5.1.55-1.rhel5.x86_64.rpm
rpm -i MySQL-client-community-5.1.55-1.rhel5.x86_64.rpm

MySQL起動してみる。

/etc/init.d/mysql start

コマンドラインに入ってみる。

/usr/bin/mysql -uroot

MySQLの--with-fast-mutexesオプションがONかOFFかで、Q4Mのどのバイナリ版を使用するか決まるのでここでチェック。

 mysql> show variables like 'timed_mutexes';
 +---------------+-------+
 | Variable_name | Value |
 +---------------+-------+
 | timed_mutexes | OFF   |
 +---------------+-------+

これでMySQLインストール終了。


Q4Mインストール

以下のページからバイナリ版をGET。

Index of /dist

fast-mutexesがOFFだったので取得するのはwithout-fast-mutexesのもの。

wget http://q4m.kazuhooku.com/dist/mysql-5.1.55-linux-x86_64-glibc23-without-fast-mutexes-q4m-0.9.5.tar.gz

あとはおまじないのように以下のコマンドを実行。

tar zxvf mysql-5.1.55-linux-x86_64-glibc23-without-fast-mutexes-q4m-0.9.5.tar.gz
cd q4m-0.9.5-linux-unknown/
cp -f libqueue_engine.so /usr/lib64/mysql/plugin
install -m 755 support-files/q4m-forward /usr/bin/q4m-forward
cat support-files/install.sql | /usr/bin/mysql -uroot

エラーが出なければこれでインストール完了。

いちおう確認

 /usr/bin/mysql -uroot
 mysql> show plugins;
 +------------+----------+----------------+--------------------+---------+
 | Name       | Status   | Type           | Library            | License |
 +------------+----------+----------------+--------------------+---------+
 | binlog     | ACTIVE   | STORAGE ENGINE | NULL               | GPL     |
 | partition  | ACTIVE   | STORAGE ENGINE | NULL               | GPL     |
 | ARCHIVE    | ACTIVE   | STORAGE ENGINE | NULL               | GPL     |
 | BLACKHOLE  | ACTIVE   | STORAGE ENGINE | NULL               | GPL     |
 | CSV        | ACTIVE   | STORAGE ENGINE | NULL               | GPL     |
 | FEDERATED  | DISABLED | STORAGE ENGINE | NULL               | GPL     |
 | MEMORY     | ACTIVE   | STORAGE ENGINE | NULL               | GPL     |
 | InnoDB     | ACTIVE   | STORAGE ENGINE | NULL               | GPL     |
 | MyISAM     | ACTIVE   | STORAGE ENGINE | NULL               | GPL     |
 | MRG_MYISAM | ACTIVE   | STORAGE ENGINE | NULL               | GPL     |
 | QUEUE      | ACTIVE   | STORAGE ENGINE | libqueue_engine.so | GPL     |
 +------------+----------+----------------+--------------------+---------+
 11 rows in set (0.00 sec)

一番最後の「QUEUE」が追加されていればOK。

注意点

上記の通り、MySQLrpmQ4Mバイナリ版でインストールするなら特に難しいことはなかったけど、いちおう注意点。

  • MySQLrpmは環境単位、機能単位でたくさんのパッケージに分かれているので適切なものを選ぶこと。
  • with-fast-mutexesのオプションを確認して、Q4Mの2つのバイナリから正しい方を選ぶこと。

参考リンク

トラックバック - http://d.hatena.ne.jp/kazumaryu/20111201

2011-11-18

Twitterの開発者向けイベント「Tokyo Developer Teatime」に参加してきた。

| 02:00 | Twitterの開発者向けイベント「Tokyo Developer Teatime」に参加してきた。を含むブックマーク

タイムスケジュール

19:00 オープニングスピーチ 協賛 SCSK株式会社

19:10 「State of the platform」基調講演

19:30 「iOS 5 インテグレーションについて」

19:50 「10分で理解するトゥギャッタートゥギャッター

20:05〜20:15 休憩

20:15 「土管としてのTwitter」 giftee様

20:30 「デベロッパーコミュニティについて」

20:40 Q&A

21:10〜22:00 懇親会

公式ページ

https://dev.twitter.com/form/tokyo-dev-teatime

Tokyo Developer Teatime のプログラム

http://blog.jp.twitter.com/2011/11/tokyo-developer-teatime-teatimetky.html

公式ハッシュタグ #teatimeTKY のtogetter

http://togetter.com/li/215442

Tokyo Developer Teatime の公式レポート

http://blog.jp.twitter.com/2011/11/tokyo-developer-teatime-teatimetky_21.html


場所はSCSKさんの青山オフィス。

恥ずかしながらSCSKさんのことを存じ上げなかったんですが、

社員も何千人もいて東証1部に上場もしている大きな会社さんなんですね。

とても立派なビルで圧倒されました。

f:id:kazumaryu:20111117204148j:image:w360

会場も広くてこのにぎわい。

前にたっているのはサンフランシスコからきたtwitterエンジニア達。


以下、各スピーチのメモです。


オープニングスピーチ

スピーカー、SCSK武田元氏


ふむふむ。twitter x エンタープライズ

twitterはもはや個人が利用する単なるコミュニケーションツールではないってことでしょう。


State of the platform

スピーカー、ジェイソンコスタ氏(@jasoncosta)



このセッションは英語でスピーチされ、ハッシュタグ#teatimeJPに翻訳が流されるというもの。

英語の聞き取りが不得手なので、#teatimeJPを見ながら理解しようとしたがイマイチ。。


ただしきりに言っていたのは、twitterはエコシステムに対して投資してきて、今とても成功している。

そしてさらに今は絶好のチャンスであり、多くの企業がエコシステムに投資しているということ。


このときはエコシステムって何のことを言っているのかよく理解できなかったんだけど、

エコシステム とは - コトバンク

これをふまえると、twitterを中心として、デベロッパーベンダーサードパーティー、ユーザーが有機的に結びつき、

共に成長していくシステムっていう理解でいいんだと思う。


Quoraは成功している代表的な例で、各ページにtwitter経由で30PV以上のアクセスがある。

Twitterは今検索エンジンの次にユーザーをサイトへ導く重要な導線となっていて、

Twitter for websiteという機能でフォローボタンやツイートボタンを提供している。

ツイートボタン設置でツイートが7倍以上になるよ、と。


http://twitter.com/#!/twj_dev

http://twitter.com/#!/search?q=%23teatimeJP

http://twitter.com/#!/search?q=%23teatimeTKY

このへんを追ってもらえればより詳しく分かると思う。


iOS5インテグレーション

スピーカー、ショーンクック氏(@theSeanCook)

こちらも前のセッションと同様に英語のスピーチハッシュタグでの翻訳。


とにかく開発者にとっては実装が非常に簡単になり、ライブラリダウンロード不要で、

しかもoauthの複雑な仕様を理解する必要がなくなるので、非常によいことだと。

近々パートナーアプリが続々ローンチされるらしい。


10分で理解するトゥギャッター

スピーカー、トゥギャッター吉田氏

  • togetterについて
    • 2009/9release
    • masasonが使用してブレイク
  • 裏側
    • 使用しているAPIは少ない
    • bitlyなど、それでも展開できない場合もある
    • TOLS(独自の仕組み)
      • ツイート内のURLアーカイブ
      • bitlyなどのを展開して独自に保存
      • 将来公開したいけど予定はなし。希望があれば。

土管としてのtwitter

スピーカー、giftee yanase氏(@i7a16k)

  • about giftee
    • twitetrでgiftをおくる。店舗で商品を受取る。
    • 3月ローンチ。60店舗ほど。商品100種類。無印とも提携。
  • giftee demo
  • gifteeにとってのtwitter
    • ギフトカードを届けるための土管
    • ただの土管じゃなくて透明な土管
    • バッドポイント
      • mensionなので忘れられる可能性がある。
      • 分かりやすいツイート。再送・リマインドが必要。
      • クジラが土管を防ぐ可能性。
        • 運用で逃げる。

透明な土管ではあるけど、商品が魅力的に見えるかという点では、facebookの方が上。

facebookソーシャルグラフを使用して、いいね!した人が分かるが、twitterではツイート数しか分からない。

twitterにはぜひソーシャルグラフを活用して、フォローしている人がその商品についてなんと言っているか分かるようにしてほしい。


とのこと。後半に部分はまさにおっしゃる通り。納得でした。


デベロッパーコミュニティについて

スピーカー、Twitter Japan 山本裕介氏(@yusukey)


日本は大きなマーケットで日本語ハッシュタグやユニークなクライアントもあり、独特の文化を持っている。

問題はAPIのドキュメントが英語で公式コミュニティも英語のみだったが、日本での展開を進めている。

またTwitter APIを使ったハッカソンなどデベロッパーコミュニティのイベントを企画しているとのことでした。


正式な日本デベロッパー向け公式アカウント

@twj_dev


公式日本語メーリングリスト

http://bit.ly/tdt-ja


twitterオープンソースソフトウェア

@TwitterOSS


QA

  • 採用について。日本とSFでの採用状況は?
    • 今年夏から日本で積極的に。進行中。
    • バックエンドは似言語処理、検索。
    • フロントエンドは多様なモバイル
    • 日本からSFへのリロケーションもアリ。
    • 日本を拠点とするエンジニアもアリ。
  • 日本語URLの開発しているのでURLの国際ドメイン対応は?
    • ドメインの国際化が遅れている。日本語パスも対応できていない。
    • 日本語URLに区別、判断、ロジックが難しい。
  • 日本でローンチパートナーになる基準は?
    • 地元SFエンジニアと交流している
    • 日本でもいっしょにプロモートしたい
  • userstreamで抜けがよくあるが対応は?
    • 問題は認識している。対応中。なおします。
    • 日本語でもトラブル対応、サポート可能。MLへどぞ。
  • APIコールの制限によくかかる。有料化ある?
    • 課金の計画はない。
    • 範囲内で使うように設計してほしい。
    • 和やかだった雰囲気にちょっと緊張感が・・・
    • firehorse(全世界のパブリックツイートを全部取得可能)は限られたサイトのみのAPI
    • site ( or user ) streamingAPIを使うとよい
  • アクティビティのAPIを公式に公開する予定は?
    • yes。時期わからず。it's coming。
トラックバック - http://d.hatena.ne.jp/kazumaryu/20111118