11 月 18 2008

[rails] ユーザーのパスワード忘れ処理を簡単に生成してくれるプラグインforgot_password ( with Restful-authentication)

Published by haga under ruby, ruby on rails

はじめに

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
  • 修正ファイル
    • config/routes.rb

続きを読む »

2 responses so far

11 月 15 2008

[rails] restful-authenticationの使い方 基本編

Published by haga under ruby, ruby on rails

はじめに

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

次回はパスワード再設定を実装してみます

No responses yet

11 月 13 2008

Rails2.2の新機能i18nを使ってみる

Published by haga under ruby, ruby on rails

はじめに

Rails2.2ではついに国際化が標準で搭載されることになった。

Rails 2.2 リリースノート日本語訳

これまでRuby on Railsで作ったアプリの検証メッセージなどを日本語化する場合は gettextを使う方法がデファクトスタンダードだったけれど、正直めんどくさいし、初心者にはとっつきにくかった。

ということで正式版が登場する前にi18nを試してみよう。

続きを読む »

No responses yet

11 月 11 2008

Mac Leopard環境でActionMailerでメール送信できない時に見直すこと

Published by haga under ruby, ruby on rails

結論

可能性として

  • 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ポートが空いてないっぽい。 そりゃそーだ。メールサーバ起動してないもん。。

sudo postfix start


これで起動する。 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


こんな感じで追加しておきます。

以上

No responses yet

11 月 10 2008

gemが1.3.xにバージョンアップできない件

Published by haga under ruby

うちの環境で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をつけて実行しました。

No responses yet

10 月 19 2008

[Ruby] 集合知プログラミング 03

Published by haga under ruby

オライリー「集合知プログラミング」のPythonサンプルコードをRubyに翻訳していく作業ログ。3回目。

続きを読む »

No responses yet

10 月 16 2008

[Ruby] 集合知プログラミング 02

Published by haga under ruby

オライリー「集合知プログラミング」のピアソン相関によるスコア計算のサンプルプログラムをRubyに置き換えたもの

続きを読む »

No responses yet

10 月 14 2008

JavaScriptで文字列リテラルは Stringクラスのインスタンスではない

Published by haga under javascript, 日記

最近人にプログラミングを教えるというような事があって、「オブジェクトの正体」を理解してもらおうという目的から いろんなリテラルを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のサイトでしか結論を見つけていませんので、他のブラウザでどうなのかは一切調べてませんので悪しからず。誰か暇な人は調べてトラバください。

No responses yet

10 月 14 2008

[Ruby] 集合知プログラミング 01

Published by haga under ruby

オライリーの「集合知プログラミング」を購入したので読み始めている。 最近はプログラミング本よりビジネス本が読みたい気分なんだけど、何故か買ってしまった。買ってしまったからにはちゃんと読もう。

でもこの本のサンプルコードは全部Pythonで書かれている。Pythonはちょっとかじったことがある程度で全然覚えていない。特に乱用されているリスト内包がよくわからない。

続きを読む »

No responses yet

10 月 10 2008

Shur.inにブックマークレットの機能を追加しました。

Published by haga under Webサービス, ruby on rails, 日記

Shur.inにブックマークレットの機能を追加しました。

ページ内の「もっと」をクリックして、下の方にある 「このリンクをブックマークに登録すると、今見ているページをわりと短くできるよ」 というリンクをブックマークに登録してください。

今見ているページをいつでもわりと短くすることができます。

気が向いたらFireFoxのプラグインとかにしたいっすね。

No responses yet

Next »