2012-04-23 19 views
1

ユーザーセッションにFacebookのデータを維持することはできません私はここに、私のRailsアプリケーションでomniauth工夫使用していますUserクラスはRailsはomniauth考案:

ある
class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable, :omniauthable 

    attr_accessible :email, :password, :password_confirmation, :remember_me, :encrypted_password, :fb_id 

    def set_facebook_info(info) 
    @facebook_info = info 
    end 

    def get_facebook_info 
    @facebook_info 
    end 

    def self.find_for_facebook_oauth(access_token, signed_in_resource=nil) 
    data = access_token.extra.raw_info 
    if user = User.find_by_email(data.email) 
     if not user.fb_id 
     user.fb_id = access_token.uid 
     user.save 
     end 
     user.set_facebook_info "whatever" <-- I tried here 

     user 
    else # Create a user with a stub password. 
     user = User.create(:email => data.email, :password => Devise.friendly_token[0,20], :fb_id => access_token.uid) 
     user 
    end 
    end 

    def self.new_with_session(params, session) 
    super.tap do |user| 
      user.set_facebook_info "whatever" # <-- I Tried here too 
     if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["user_hash"] 
     user.email = data["email"] 
     end 
    end 
    end 
end 

私はいくつかのFacebookのユーザー情報を保持するための設定および取得メソッドを使用したいです。ビューでcurrent_userを使用すると、Userクラスで設定した値は表示されません。 application.html.erbのよう :

<span><%= current_user.get_facebook_info %></span> 

が空値

を返し誰もがそれについての考えを持っていますか?それは一般的なケースでなければなりません。一般的に、DBに接続されていない属性を、devise経由でcurrent_userにどのように割り当てることができますか?

おかげ

答えて

1

あなた@facebook_infoの属性は、データベースに永続化されません、メモリに格納されます。したがって、次のページの読み込み時に、Deviseはデータベースからモデルを再度読み込むため、情報が失われています。

Facebookの情報を保持したい場合は、それをデータベースに保存する必要があります。

class User < ActiveRecord::Base 
    serialize :preferences 
end 

user = User.create(:preferences => { "background" => "black", "display" => large }) 
User.find(user.id).preferences # => { "background" => "black", "display" => large } 

出典:http://api.rubyonrails.org/classes/ActiveRecord/Base.html

Railsはテキスト列に直接ハッシュを格納するいくつかの素晴らしい方法があります
関連する問題