Mam aplikację, która pozwala użytkownikowi Devise + Omniauth na rejestrację przez Facebooka. Używam także Carrierwave, aby umożliwić użytkownikom przesyłanie własnego obrazu profilu i przetwarzanie obrazu żądanego z Facebooka. Jako takie, mam następujące funkcje w modelu regulatora i użytkownika:Facebook Omniauth + Carrierwave Zdjęcie profilowe
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
Niestety, wciąż działa w ten błąd:
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'
Gdzie linia 68 to user = User.create!(params[:user])
rejestrowania params[:user]
udostępnia następujące wartości:
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"}}
chciałbym jakąś pomoc na przejechaniu tego błędu.
Spójrz na http://stackoverflow.com/a/22664100/2300000 może okazać się pomocne. Jest to problem z otwartym uri, ponieważ domyślnie otwarty uri nie pozwala na przekierowanie. Chociaż musisz ponownie rozważyć metodę find_for_facebook_oauth, aby działała. Jeśli masz jakiekolwiek problemy daj mi znać w komentarzach – Monideep