2012-02-02
Symfony2のログインに関するメモ
PHP | |
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で設定している文字列。
調査にけっこう時間とられてしまったので、覚えておくと幸せになれるかも。
2011-12-01
Q4Mインストールメモ
MySQL | |
Q4Mをインストールしようとして調べたところたくさんの情報が見つかったけど、
みなさんけっこう苦労されていて、さらに解決方法も各々で定まっていない様子。
傾向として、MySQLやQ4Mをソースからインストールすると手こずるようだったので、
MySQLをrpmでインストール後、Q4Mのバイナリ版をMySQLに組み込むという方法でインストールした。
環境
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 -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 | +---------------+-------+
Q4Mのインストール
以下のページからバイナリ版をGET。
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。
注意点
上記の通り、MySQLをrpm、Q4Mはバイナリ版でインストールするなら特に難しいことはなかったけど、いちおう注意点。
- MySQLのrpmは環境単位、機能単位でたくさんのパッケージに分かれているので適切なものを選ぶこと。
- with-fast-mutexesのオプションを確認して、Q4Mの2つのバイナリから正しい方を選ぶこと。
参考リンク
2011-11-18
Twitterの開発者向けイベント「Tokyo Developer Teatime」に参加してきた。
イベント | |
タイムスケジュール
19:10 「State of the platform」基調講演
19:50 「10分で理解するトゥギャッター」 トゥギャッター様
20:05〜20:15 休憩
20:15 「土管としてのTwitter」 giftee様
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
Tokyo Developer Teatime の公式レポート
http://blog.jp.twitter.com/2011/11/tokyo-developer-teatime-teatimetky_21.html
場所はSCSKさんの青山オフィス。
恥ずかしながらSCSKさんのことを存じ上げなかったんですが、
社員も何千人もいて東証1部に上場もしている大きな会社さんなんですね。
とても立派なビルで圧倒されました。
会場も広くてこのにぎわい。
前にたっているのはサンフランシスコからきたtwitterのエンジニア達。
以下、各スピーチのメモです。
オープニングスピーチ
スピーカー、SCSK武田元氏
- twitterの投稿は今年9月、一日平均2億3千万。
- そのうち日本人のツイートがおよそ20%らしい。
- twitterについて
- モルガン・スタンレーで自社のブローカーにtwitter使用を許可した。つまりtwitterは広報としてだけでなく本業でも使用されてきている。
- twitter x エンタープライズの可能性
- 喜怒哀楽の大量データ
- コミュニケーションのツールとして
twitterはもはや個人が利用する単なるコミュニケーションツールではないってことでしょう。
State of the platform
スピーカー、ジェイソンコスタ氏(@jasoncosta)
このセッションは英語でスピーチされ、ハッシュタグ#teatimeJPに翻訳が流されるというもの。
英語の聞き取りが不得手なので、#teatimeJPを見ながら理解しようとしたがイマイチ。。
ただしきりに言っていたのは、twitterはエコシステムに対して投資してきて、今とても成功している。
そしてさらに今は絶好のチャンスであり、多くの企業がエコシステムに投資しているということ。
このときはエコシステムって何のことを言っているのかよく理解できなかったんだけど、
これをふまえると、twitterを中心として、デベロッパー、ベンダー、サードパーティー、ユーザーが有機的に結びつき、
共に成長していくシステムっていう理解でいいんだと思う。
Quoraは成功している代表的な例で、各ページにtwitter経由で30PV以上のアクセスがある。
Twitterは今検索エンジンの次にユーザーをサイトへ導く重要な導線となっていて、
Twitter for websiteという機能でフォローボタンやツイートボタンを提供している。
http://twitter.com/#!/search?q=%23teatimeJP
http://twitter.com/#!/search?q=%23teatimeTKY
このへんを追ってもらえればより詳しく分かると思う。
iOS5インテグレーション
スピーカー、ショーンクック氏(@theSeanCook)
こちらも前のセッションと同様に英語のスピーチにハッシュタグでの翻訳。
とにかく開発者にとっては実装が非常に簡単になり、ライブラリのダウンロード不要で、
しかもoauthの複雑な仕様を理解する必要がなくなるので、非常によいことだと。
近々パートナーアプリが続々ローンチされるらしい。
10分で理解するトゥギャッター
スピーカー、トゥギャッター吉田氏
- togetterについて
- 2009/9release
- masasonが使用してブレイク
- 裏側
- 使用しているAPIは少ない
- bitlyなど、それでも展開できない場合もある
- 新サービスお披露目
- miica.jp
- プロフィール交換サービス
- HTML5,css3 位置情報と時間 websocketを使用
- http://www.miica.jp/
- miica.jp
土管としてのtwitter
スピーカー、giftee yanase氏(@i7a16k)
- about giftee
- twitetrでgiftをおくる。店舗で商品を受取る。
- 3月ローンチ。60店舗ほど。商品100種類。無印とも提携。
- giftee demo
透明な土管ではあるけど、商品が魅力的に見えるかという点では、facebookの方が上。
facebookはソーシャルグラフを使用して、いいね!した人が分かるが、twitterではツイート数しか分からない。
twitterにはぜひソーシャルグラフを活用して、フォローしている人がその商品についてなんと言っているか分かるようにしてほしい。
とのこと。後半に部分はまさにおっしゃる通り。納得でした。
デベロッパーコミュニティについて
スピーカー、Twitter Japan 山本裕介氏(@yusukey)
日本は大きなマーケットで日本語ハッシュタグやユニークなクライアントもあり、独特の文化を持っている。
問題はAPIのドキュメントが英語で公式コミュニティも英語のみだったが、日本での展開を進めている。
またTwitter APIを使ったハッカソンなどデベロッパーコミュニティのイベントを企画しているとのことでした。
公式日本語メーリングリスト
QA
- 採用について。日本とSFでの採用状況は?
- userstreamで抜けがよくあるが対応は?
- 問題は認識している。対応中。なおします。
- 日本語でもトラブル対応、サポート可能。MLへどぞ。

