我跟着设计官方维基通过omniauth整合设计与facebook。
我可以使用我的Facebook帐户登录,但不知何故,我无法保存facebook的omniauth回调中的其他数据。
请注意,我确实复制了this guide
上的所有内容请查看我当前的user.rb
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:omniauthable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me,
:fb_raw
def self.find_for_facebook_oauth(access_token, signed_in_resource=nil)
data = access_token.extra.raw_info
if user = User.where(:email => data.email).first
user
else # Create a user with a stub password.
User.create!(:email => data.email, :password => Devise.friendly_token[0,20])
end
end
def self.new_with_session(params, session)
super.tap do |user|
if data = session["devise.facebook_data"] && \
session["devise.facebook_data"]["extra"]["raw_info"]
# Here you can save all the info you want including networks and education
user.email = data["email"]
user.fb_raw = data['raw_info']
end
end
end
end
这里的问题是self.new_with_session是从不调用。我在super.tab
之前放置了一个抛出异常条款来证明我的假设。
有没有人知道这方面的工作?
答案 0 :(得分:0)
new_with_session
呼叫DeviseRegistrationController
,因此它不在OmniauthCallbacksController
中,因此在Facebook登录期间永远不会被呼叫是正常的。