OmniAuth を使用して、Facebook からハッシュ データを正常にフェッチしました。「auth」に保存されています。
# extra=#] last_name="Jordan" link="http://www.facebook.com/michael" locale="en_US" middle_name="Ball" name="Michael Jordan" quotes="\"lalala\"\n\n\"lala\"" timezone=9 updated_time="2011-09-01T20:25:58+0000" username="mjordan82" verified=true>> info=# verified=true> provider="facebook" uid="123456879">
ユーザーモデルでは、次のようにします。
def self.create_with_omniauth(auth)
create! do |user|
user.provider = auth["provider"]
user.uid = auth["uid"]
user.name = auth["name"]
end
end
データベースを確認したところ、プロバイダーとuidしか取得できませんでした。User.name 行が空でした。テストの結果、プロバイダーと uid 以外のデータを保存できないことがわかりました。たとえば、user.name = auth["provider"] または user.name = auth["uid"] は問題なく保存されましたが、user.name = auth["timezone"] または user.name = のようなものを試してみると、 auth["last_name"]、変数には何も格納されていませんでした。誰でもこれを修正する方法を知っていますか? user.name = auth["user_info"]["name"] も試しましたが、エラーが返されました。
user.name = auth["name"] が何も保存しない理由がわかりません。つまり、この場合、なぜ auth["name"] が "Michael Jordan" ではないのでしょうか?