Tôi có một ứng dụng mà người dùng Devise + Omniauth cho phép người dùng đăng ký qua Facebook. Tôi cũng đang sử dụng Carrierwave để cho phép người dùng tải lên hình ảnh hồ sơ của riêng họ và xử lý hình ảnh được yêu cầu từ Facebook. Như vậy, tôi có các chức năng sau đây trong bộ điều khiển và sử dụng mô hình:Facebook Omniauth + Carrierwave Hồ sơ Hình ảnh
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
omniauth_callbacks_controller.rb
def facebook
# You need to implement the method below in your model (e.g. app/models/user.rb)
@user = User.find_for_facebook_oauth(request.env["omniauth.auth"])
if @user.persisted?
sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated
set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format?
else
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
Thật không may, tôi tiếp tục chạy vào lỗi này:
ActiveRecord::RecordInvalid (Validation failed: User profile image could not download file: redirection forbidden: http://graph.facebook.com/813865346/picture?type=square -> https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn2/t5.0-1/1118622_813865346_1465272585_q.jpg):
app/models/user.rb:68:in `find_for_facebook_oauth'
app/controllers/users/omniauth_callbacks_controller.rb:4:in `facebook'
Dòng 68 là user = User.create!(params[:user])
Logging các params[:user]
cung cấp các giá trị sau:
Params: {:username=>"*", :email=>"*", :password=>"iePVLt7XEWk4YwPjja6n", :user_profile_attributes=>{:first_name=>"*", :last_name=>"*", :remote_image_url=>"http://graph.facebook.com/*/picture?type=square"}, :user_auths_attributes=>{:uid=>"*", :provider=>"facebook"}}
Tôi muốn một số giúp đỡ về để vượt qua lỗi này.
Hãy xem http://stackoverflow.com/a/22664100/2300000 bạn có thể tìm thấy nó hữu ích. Đó là một vấn đề với uri mở theo mặc định mở uri không cho phép chuyển hướng. Mặc dù bạn cần phải xác định lại phương thức find_for_facebook_oauth của mình để làm cho nó hoạt động. Nếu bạn có bất kỳ vấn đề nào, hãy cho tôi biết trong các ý kiến – Monideep