我有一个用户Devise + Omniauth允许用户通过Facebook注册的应用程序.我还使用Carrierwave允许用户上传他们自己的个人资料图像并处理从Facebook请求的图像.因此,我在控制器和用户模型中具有以下功能:
user.rb
def self.find_for_facebook_oauth( data, signed_in_resource=nil)
user = User.where(:email => data.info.email).first
unless user
params =
{
:user =>
{
:username => data.uid,
:email => data.info.email,
:password => Devise.friendly_token[0,20],
:user_profile_attributes =>
{
:first_name => data.info.first_name,
:last_name => data.info.last_name,
:remote_image_url => data.info.image
},
:user_auths_attributes =>
[{
:uid => data.uid,
:provider => data.provider
}]
}
}
user = User.create!(params[:user])
end
return user
end
Run Code Online (Sandbox Code Playgroud)
omniauth_callbacks_controller.rb
def facebook
# You need to implement the method below in your model (e.g. app/models/user.rb)
@user = …Run Code Online (Sandbox Code Playgroud)