Archive for the ‘プラグイン’ tag
【restful_authentication】認証メールとDBのactivation_codeが全然違う件
メールでユーザー認証とか格好いいよね
railsにrestful_authenticationというプラグインがある。
いざ実装すると面倒くさいユーザー認証のあたりを受け持ってくれる。
しかもよくWebサイトでのユーザー登録で見かける、ブラウザで登録→登録したメールアドレスに確認メールを投げる→メール中のactivation用URLに飛ぶことでユーザー登録完了という流れを簡単に実装してくれる。(プラスしてacts_as_state_machineプラグインも使用するけど)
ちょっと今作っているWebサイトがあって、それに使えそうなので試してみた。
http://terrazilog.quipu.jp/?eid=585865(てらじろぐ)
上記サイト様に詳しく説明されていたのでそれに従う。
要約すると以下
- plugin入れーの
- userとsessionモデルgenerateしーの
- routes.rbにルート書きーの
- SMTPサーバにメールを投げる設定しーの
- オブザーバ使えるようにしーの
嫁ぎー
以上。で、db:createとdb:migrateすると、DBとテーブルが作られます。
で、試しに/users/newからユーザーの登録処理をやってみる。
無事登録したメールアドレスに、ユーザー認証用のURLが書かれたメールが飛んだ。
activation_code偽装
これでよかった、実験は成功で終わらないのが僕の悪いところ。メールにかかれた認証URLをクリックしても、ユーザーのstateがpending(activeになる前の保留状態)から変わらない。
何度登録を繰り返してもうまくいかないので、usersテーブルの中のactivation_codeを確認する。
あれ?activation_codeがメールに書かれてるものと違っている・・・?
メールに書かれたURLは
http://localhost:3000/activate/XXXXXXXXXXXXXXX
みたいな感じで、XXXのところがactivationコードになるのだけど、ここがDBに登録されているものとまったく違っている。これじゃあ認証できないわけだ。
調べてみると、user_mailerモデルのsignup_notification(送信するメールをごにょごにょするところ)までのactivation_codeと、userコントローラーでcreateが終わった時でactivation_codeが異なっている様だ。
要するに、ここにアクセスしてくださいね、とメールを送った後に、なぜかそのURLを書き換えてしまっている状態。
解決方法
activation_codeを複数回設定しているとしか思えないのだけど、ソースをおったけどよく判りませんでした。
なので僕お得意のやっつけで、
メールの設定をしているsignup_notificationの中で、userの設定をDBに書き込んで対処しました。
class UserMailer < ActionMailer::Base
def signup_notification(user)
user.save
・・・・
すげー強引。
いちおうこれでやったら、DBの中とメールで送られてきたactivation_codeが等しいものになりました。
このativation_codeが変わってしまうのがどうしても判らなくて、先達の教えを請おうといつものようにGoogleったんだけど、なぜか全然同じような問題に関する記述が見当たらなかった。え?なんで?僕だけなの?なんで???
メール認証で間違ったURLを送りつけるとかけっこうクリティカルな問題なのに、他に聞かないってことは僕の環境のせいなんだろうか。
ちなみに環境はrails2.2.2、mysql5.0.27、pluginは多分最新のもの、OSはwindowsXPです。
対処はわかっても今だ原因は判らないというモヤモヤ。
WordPress2.7にアップグレードした作業録
最近このブログの管理画面にログインすると常にWordpressをアップグレードするよう促すメッセージが出ていた。
執拗なアップグレードへの誘いに対し、めんどくさくてあえてなにもしないをしていた僕ではあったが、いいかげんうっとおしくなってきたのであえてアップグレードするをした。
アップグレードってやったことなかったので、このページを参考にさせていただきました。
次にアップグレード作業をする時の覚書として、作業を記録しときます。
カテゴリリストから特定のカテゴリを表示しないようにする
誰にも秘密にしたいことがあるじゃないですか。て言う。
なら、ブログに書くなよって話なんですが以前、特定の記事をトップページに出力しないようにするエントリーを書きました。
トップページには確かに出なくなったけど、大体カテゴリー一覧をサイドバーに乗っけてる人が多いわけで、いくらトップページから「しっぽりむふふ日記」を隠蔽したとしても、サイドバーにカテゴリー表示されてましたじゃあ意味が無い。あまりにも切ない。
というわけで、特定のカテゴリの記事をカテゴリリストから省く方法です。今回はFilterCategoriesという便利なプラグインを使用します。
*この記事はMT4のケースを想定していますが、MT3xでもFilterCategoriesは使用できます。