11 月
18
2008
はじめに
Railsとrestful-authenticationの組み合わせで、パスワード忘れの機能を実装するにあたって、いろいろと参考になるものを探していたところ、簡単に機能を実装できるプラグインがあったので紹介。
forgot_passwordプラグイン
http://github.com/greenisus/forgot_password/tree/master
restful-authenticationを使う事前提で、script/generate forgot_passwordというジェネレータでちゃちゃっとパスワードを忘れた人用のページを作ってくれます。実際にやってみます。
準備
まずはプロジェクトのインストールから
% rails forgot_password_sample
% cd forgot_password_sample/
つづいてプラグインのインストール。gitコマンドが必要です。
% script/plugin install git://github.com/technoweenie/restful-authentication.git
% script/plugin install git://github.com/greenisus/forgot_password.git
そして、認証とパスワード忘れのジェネレーターを実行。
% script/generate authenticated --include-activation user sessions
% script/generate forgot_password forgot_password user
forgot_passwordプラグインによって、以下のファイルが追加・編集されている
- 追加ファイル
- db/migrate/xxxxxxxxxxxxxx_create_forgot_passwords.rb
- app/models/forgot_password.rb
- app/models/forgot_password_mailer.rb
- app/controllers/forgot_passwords_controller.rb
- 修正ファイル
続きを読む »
Tags: rails, ruby
11 月
15
2008
はじめに
Railsでの認証機構はrestful-authenticationで決まりらしいのですが、いざ自分で新しい機能を実装しようと思うとなかなか骨があってどう組んで良いものか悩んでしまう。
ユーザー認証のあるサービスには欠かせないであろうパスワードを忘れた人への対策処理を実装してみようと思うのだけど、えらく長くなりそうなので、とりあえず基本的なrestful-authenticationの使い方を。
準備
- railsのプロジェクト「auth_sample」を生成
- restful-authenticationのインストール
- aasmのインストール
- script/generate authenticated
// プロジェクト生成
% rails auth_sample
% cd auth_sample
// プラグインインストール
% script/plugin install git://github.com/technoweenie/restful-authentication.git
% script/plugin install git://github.com/rubyist/aasm.git
// 雛形の生成(メールアクティベートとaasmによる状態管理を有効にしておく)
% script/generate authenticated --include-activation --aasm user sessions
続いて
- config/environment.rbにuserモデルのオブザーバーを定義
- config/routes/rb
- /activateのルートを設定
- usersのresourcesにsuspend,unsuspend,put,purgeを追加
- AuthenticatedSystemのインクルード
# config/environment.rbに追加
config.active_record.observers = :user_observer
# config/routes.rbに追加
map.activate '/activate/:activation_code', :controller => 'users', :action => 'activate', :activation_code => nil
map.resources :users, :member => { :suspend => :put, :unsuspend => :put, :purge => :delete }
# app/controllers/applications.rbに追加
include AuthenticatedSystem
#
を追加しておく。
さらに、このままではaasm用のクラスを読み込めないので
vendor/plugins/restful-authentication/rails/init.rb
に下記の追加
# vendor/plugins/restful-authentication/rails/init.rb
# この行を追加してaasmを読み込む
require File.join(File.dirname(__FILE__), "..", "lib", "authorization", "aasm_roles")
ここまでで、基本的なrestful-authenticationの準備は終わり。
rake db:migrateして、サーバを起動し
- 新規登録
- http://localhost:3000/signup
- ログイン
- http://localhost:3000/login
- ログアウト
- http://localhost:3000/logout
次回はパスワード再設定を実装してみます
Tags: rails, ruby
11 月
13
2008
はじめに
Rails2.2ではついに国際化が標準で搭載されることになった。
Rails 2.2 リリースノート日本語訳
これまでRuby on Railsで作ったアプリの検証メッセージなどを日本語化する場合は
gettextを使う方法がデファクトスタンダードだったけれど、正直めんどくさいし、初心者にはとっつきにくかった。
ということで正式版が登場する前にi18nを試してみよう。
続きを読む »
Tags: i18n, rails, ruby
11 月
11
2008
結論
可能性として
- Postfixが起動していない
- プロバイダのOP25B対策
がある
プロセス
今日何時間も格闘したのでメモ。
MacでRails開発している際、普通にはActionMailerでメールを送信できない。
config.action_mailer.raise_delivery_errors = true
の場合
Errno::ECONNREFUSED: Connection refused - connect(2)
メール送信時にこんなエラーが出るはず。
で、そもそもNet::SMTPが使えていないっぽいのです。
% irb
>> require 'net/smtp'
>> smtp = Net::SMTP.start( 'localhost', 25 )
Errno::ECONNREFUSED: Connection refused - connect(2)
ふむふむ。25ポートが空いてないっぽい。
そりゃそーだ。メールサーバ起動してないもん。。
これで起動する。
Linuxの生活になれて、Postfixが起動していないというオチを考えてなかったため、ここまでに3時間くらいかかってます。
chkconfig的なものってないですかねぇ?
それでも送信できない場合は、そもそもmailが使えてない可能性が。
% echo 'Hi' | mail -s test mitsuru.haga@gmail.com
% tail /var/log/mail.log
これで送信が成功しているかチェックしましょう。
プロバイダのOP25B対策で送信できていない可能性があるので、各プロバイダでリレーホストを調べて
/etc/postfix/main.cf
に追加します。
例えば、うちはKDDIなので
relayhost = relay-mta.auone-net.jp
こんな感じで追加しておきます。
以上
Tags: postfix, rails, ruby
11 月
10
2008
うちの環境でgemが1.1.1から1.3.1にアップデートできなくなる現象に陥った。
環境はMac OS10.5.5, ruby 1.8.6, gem1.1.1
Moon% sudo gem update --system
Updating RubyGems
Bulk updating Gem source index for: http://gems.rubyforge.org/
Nothing to update
http://blog.segment7.net/articles/2008/09/26/rubygems-1-3-0
ここを見ると、gem1.1とgem1.2にはupdate --systemにバグがある模様です。
上記ページに従って
gem install rubygems-update
update_rubygems
とすれば最新のgemがインストールされます。
僕の環境の場合、
sudo gem install rubygems-update
sudo update_rubygems
とsudoをつけて実行しました。
Tags: ruby
10 月
19
2008
オライリー「集合知プログラミング」のPythonサンプルコードをRubyに翻訳していく作業ログ。3回目。
続きを読む »
Tags: ruby, 集合知
10 月
16
2008
オライリー「集合知プログラミング」のピアソン相関によるスコア計算のサンプルプログラムをRubyに置き換えたもの
続きを読む »
Tags: ruby, 集合知
10 月
14
2008
最近人にプログラミングを教えるというような事があって、「オブジェクトの正体」を理解してもらおうという目的から
いろんなリテラルをinstanceofにかけていました(FireFox3のFireBugで)。
[1,2,3] instanceof Object // => true
{ a:0, b:1} instanceof Object // => true
こんな感じで。
しかし文字リテラルの挙動が期待と違っていました。
"a" instanceof Object // => trueかと思いきやfalse
"a" instanceof String // => trueかと思いきやfalse
ちょっと待ってほしい。
文字リテラルも文字列クラスのインスタンスですよー、なんて解説をしようと思ってたのに
これじゃぁ、文字リテラルはStringオブジェクトじゃないという事になってしまう。
事実として
"hoge".sub("o","a") // => "hage"
というコードが実行できるのだから、文字列リテラルがStringオブジェクトじゃないと話が合わない。だってsubメソッドはStringのインスタンスメソッドじゃないか!
結論
答えはここにありました。
Literals - MDC(文字列リテラル)
String Object - MDC #文字列リテラルは String オブジェクトとは別物
文字列リテラルの値でなら、String オブジェクトのどんなメソッドでも呼び出すことができます。JavaScript が自動的に文字列リテラルを一時的な String オブジェクトに変換し、メソッドを呼び出し、その一時的な String オブジェクトを破棄するのです。String.length プロパティを文字列リテラルで使うこともできます。
という事なんですって。
つまり、文字列リテラルの状態では確かにStringのインスタンスではないけれど、メソッドを呼び出す時はJavaScriptがStringオブジェクトに変換していると。なるほど。
ちなみにこのエントリーの内容はMozilla FireFoxでしか試していませんし、Mozillaのサイトでしか結論を見つけていませんので、他のブラウザでどうなのかは一切調べてませんので悪しからず。誰か暇な人は調べてトラバください。
Tags: javascript
10 月
14
2008
オライリーの「集合知プログラミング」を購入したので読み始めている。
最近はプログラミング本よりビジネス本が読みたい気分なんだけど、何故か買ってしまった。買ってしまったからにはちゃんと読もう。
でもこの本のサンプルコードは全部Pythonで書かれている。Pythonはちょっとかじったことがある程度で全然覚えていない。特に乱用されているリスト内包がよくわからない。
続きを読む »
Tags: ruby
10 月
10
2008
Shur.inにブックマークレットの機能を追加しました。
ページ内の「もっと」をクリックして、下の方にある
「このリンクをブックマークに登録すると、今見ているページをわりと短くできるよ」
というリンクをブックマークに登録してください。
今見ているページをいつでもわりと短くすることができます。
気が向いたらFireFoxのプラグインとかにしたいっすね。
Tags: rails, Shur.in, サービス