Home > ruby > 【restful_authentication】認証メールとDBのactivation_codeが全然違う件

【restful_authentication】認証メールとDBのactivation_codeが全然違う件

メールでユーザー認証とか格好いいよね

railsにrestful_authenticationというプラグインがある。

いざ実装すると面倒くさいユーザー認証のあたりを受け持ってくれる。

しかもよくWebサイトでのユーザー登録で見かける、ブラウザで登録→登録したメールアドレスに確認メールを投げる→メール中のactivation用URLに飛ぶことでユーザー登録完了という流れを簡単に実装してくれる。(プラスしてacts_as_state_machineプラグインも使用するけど)

ちょっと今作っているWebサイトがあって、それに使えそうなので試してみた。

http://terrazilog.quipu.jp/?eid=585865(てらじろぐ)

上記サイト様に詳しく説明されていたのでそれに従う。

要約すると以下

  1. plugin入れーの
  2. userとsessionモデルgenerateしーの
  3. routes.rbにルート書きーの
  4. SMTPサーバにメールを投げる設定しーの
  5. オブザーバ使えるようにしーの

嫁ぎー

以上。で、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です。

対処はわかっても今だ原因は判らないというモヤモヤ。

関連する投稿

Comments:3

obalyon 09-02-03 (火) 1:09

まったく同じ状況ではまってましたが、助かりました。
(環境はこちらと同じrails2.2.2です)
ありがとうございました。助かりました。

てか、情報ないのは何ででしょうね。。。

obalyon 09-02-04 (水) 21:06

解決策が
http://wiki.github.com/technoweenie/restful-authentication
の下のほうに書いてありました。
参考までに。

HEX68 09-02-14 (土) 21:45

>obalyon様

おおおお!これは!
僕もいい加減英語が苦手とか言ってる場合じゃないですね。ドキュメントはもっと追わなきゃだめ!絶対!

マジでたすかりました!!というか、日本語でこんな記述みかけませんでしたね・・・常識なんだろうか・・・

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://hmlab.info/minor/2009/02/20090201_2328053860.html/trackback
Listed below are links to weblogs that reference
【restful_authentication】認証メールとDBのactivation_codeが全然違う件 from Minor Problem

Home > ruby > 【restful_authentication】認証メールとDBのactivation_codeが全然違う件

最近の写真
AMAZON
人気の記事ランキング

Return to page top