deviseのパスワードの移行するには


認証用のGEM形式のライブラリdeviseは、railsの好きな人はだれでも知っている。
deviseを導入することで、ユーザーを管理するusersテーブルにいろんなカラムが追加される。
もちろん, Userモデルに設定によりますけど、emailとpasswordを使うのが一般的である。




もし、なんらかの原因でusersテーブルを移行したい場合はどうすればいいのか?しかも、
すでに存在してる別のusersテーブルに統合したいリクエストがきたい場合はどうすればいいのか?
もちろん、統合した後にemailとpasswordのそのまま使えないといけないのだ。




usersのテーブルをみるとemailカラムは存在しているけど、passwordというカラムは存在しているない。
usersのテーブルのすべての情報をそのまま全部移行すれば問題ないけど、emailとpasswordとだけ移行したい時には

以下のカラムだけ、もっていけば大丈夫だと思います。


ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
emailカラムと
password_saltカラムと
encrypted_passwordカラムだけ
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー



しかし、保存するときにpassword_saltカラムとencrypted_passwordカラムに対して、save!実行すると
エラー発生します。「Can't mass-assign protected attributes: password_salt、 encrypted_password」
こいうカラムはformからの更新は許可していないからです。許可したら危険ですから、


回避方法:


u = User.new
u.email="xxxxxx@xxxxxxxx"
u.password_salt = "xxxxxxxxxxxxxxx"
u.encrypted_password="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
u.save!(:validate=>false)


これでパスワードをそのまま使えるぜーーー

以上|||||