<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>MinorProbrem&#187; restful_authentication</title>
	<atom:link href="http://hmlab.info/minor/tag/restful_authentication/feed/" rel="self" type="application/rss+xml" />
	<link>http://hmlab.info/minor</link>
	<description>グダグダ日記</description>
	<lastBuildDate>Wed, 27 Apr 2011 21:48:54 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://hmlab.info/minor/tag/restful_authentication/feed/" />
		<item>
		<title>【restful_authentication】認証メールとDBのactivation_codeが全然違う件</title>
		<link>http://hmlab.info/minor/2009/02/20090201_2328053860/</link>
		<comments>http://hmlab.info/minor/2009/02/20090201_2328053860/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 13:53:48 +0000</pubDate>
		<dc:creator>Hex68</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[acts_as_state_machine]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[restful_authentication]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[プラグイン]]></category>
		<category><![CDATA[メール]]></category>
		<category><![CDATA[ユーザ]]></category>
		<category><![CDATA[認証]]></category>

		<guid isPermaLink="false">http://hmlab.info/minor/?p=3860</guid>
		<description><![CDATA[メールでユーザー認証とか格好いいよね railsにrestful_authenticationというプラグインがある。 いざ実装すると面倒くさいユーザー認証のあたりを受け持ってくれる。 しかもよくWebサイトでのユーザー [...]]]></description>
			<content:encoded><![CDATA[<h2>メールでユーザー認証とか格好いいよね</h2>
<p>railsに<strong>restful_authentication</strong>というプラグインがある。</p>
<p>いざ実装すると面倒くさいユーザー認証のあたりを受け持ってくれる。</p>
<p>しかもよくWebサイトでのユーザー登録で見かける、ブラウザで登録→登録したメールアドレスに確認メールを投げる→メール中のactivation用URLに飛ぶことでユーザー登録完了という流れを簡単に実装してくれる。(プラスしてacts_as_state_machineプラグインも使用するけど）</p>
<p>ちょっと今作っているWebサイトがあって、それに使えそうなので試してみた。</p>
<p><a href="http://terrazilog.quipu.jp/?eid=585865" target="_blank">http://terrazilog.quipu.jp/?eid=585865（てらじろぐ）</a></p>
<p>上記サイト様に詳しく説明されていたのでそれに従う。</p>
<p>要約すると以下</p>
<ol>
<li>plugin入れーの</li>
<li>userとsessionモデルgenerateしーの</li>
<li>routes.rbにルート書きーの</li>
<li>SMTPサーバにメールを投げる設定しーの</li>
<li>オブザーバ使えるようにしーの</li>
</ol>
<p><strong><span style="text-decoration: line-through;">嫁ぎー</span></strong></p>
<p>以上。で、db:createとdb:migrateすると、DBとテーブルが作られます。</p>
<p>で、試しに/users/newからユーザーの登録処理をやってみる。</p>
<p>無事登録したメールアドレスに、ユーザー認証用のURLが書かれたメールが飛んだ。</p>
<h2>activation_code偽装</h2>
<p>これでよかった、実験は成功で終わらないのが僕の悪いところ。メールにかかれた認証URLをクリックしても、ユーザーのstateがpending（activeになる前の保留状態）から変わらない。</p>
<p>何度登録を繰り返してもうまくいかないので、usersテーブルの中のactivation_codeを確認する。</p>
<p>あれ？<strong>activation_codeがメールに書かれてるものと違っている</strong>・・・？</p>
<p>メールに書かれたURLは</p>
<blockquote><p>http://localhost:3000/activate/XXXXXXXXXXXXXXX</p></blockquote>
<p>みたいな感じで、XXXのところがactivationコードになるのだけど、ここがDBに登録されているものとまったく違っている。これじゃあ認証できないわけだ。</p>
<p>調べてみると、user_mailerモデルのsignup_notification（送信するメールをごにょごにょするところ）までのactivation_codeと、userコントローラーでcreateが終わった時でactivation_codeが異なっている様だ。</p>
<p>要するに、ここにアクセスしてくださいね、とメールを送った後に、なぜかそのURLを書き換えてしまっている状態。</p>
<h2>解決方法</h2>
<p>activation_codeを複数回設定しているとしか思えないのだけど、ソースをおったけどよく判りませんでした。</p>
<p>なので<strong>僕お得意のやっつけ</strong>で、</p>
<p>メールの設定をしているsignup_notificationの中で、userの設定をDBに書き込んで対処しました。</p>
<blockquote><p>class UserMailer &lt; ActionMailer::Base</p>
<p>def signup_notification(user)</p>
<p><span style="color: #ff0000;">user.save</span></p>
<p>・・・・</p></blockquote>
<p>すげー強引。</p>
<p>いちおうこれでやったら、DBの中とメールで送られてきたactivation_codeが等しいものになりました。</p>
<p>このativation_codeが変わってしまうのがどうしても判らなくて、先達の教えを請おうといつものようにGoogleったんだけど、なぜか全然同じような問題に関する記述が見当たらなかった。え？なんで？僕だけなの？なんで？？？</p>
<p>メール認証で間違ったURLを送りつけるとかけっこうクリティカルな問題なのに、他に聞かないってことは僕の環境のせいなんだろうか。</p>
<p>ちなみに環境はrails2.2.2、ｍｙｓｑｌ5.0.27、pluginは多分最新のもの、OSはwindowsXPです。</p>
<p>対処はわかっても今だ原因は判らないというモヤモヤ。</p>
]]></content:encoded>
			<wfw:commentRss>http://hmlab.info/minor/2009/02/20090201_2328053860/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://hmlab.info/minor/2009/02/20090201_2328053860/" />
	</item>
	</channel>
</rss>

