Advertisement
Guest User

Untitled

a guest
Aug 19th, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. def facebook
  2. render_api 400, "Missing fields" and return unless check_params(facebook_params, [:id, :access_token])
  3.  
  4. begin
  5. facebook_user = FbGraph2::User.me(params[:access_token]).fetch(fields: [:name, :email, :gender, :birthday, "picture.height(300)"])
  6. user = User.find_by_email(facebook_user.email)
  7.  
  8. if user.nil?
  9. # crate
  10. meta = {
  11. name: facebook_user.name,
  12. gender: facebook_user.gender,
  13. }
  14. unless facebook_user.picture.is_silhouette
  15. meta[:facebook_picture] = facebook_user.picture.url
  16. end
  17.  
  18. birthday = facebook_user.birthday rescue nil
  19. if birthday
  20. # TODO: check it works
  21. # birthday format is MM/dd/yyyy. change it to yyyy/MM/dd
  22. meta[:birthday] = Date.strptime(birthday, '%m/%d/%Y').strftime('%Y/%m/%d') rescue nil
  23. end
  24.  
  25. user = User.create(email: facebook_user.email,
  26. password: Devise.friendly_token,
  27. auth_info: {
  28. type: "facebook",
  29. info: {
  30. id: facebook_params[:id]
  31. }
  32. },
  33. meta: meta)
  34. if user.save
  35. sign_in(user)
  36. render_api 201, user.as_json({:self => true})
  37. else
  38. render_api 400, user.errors.full_messages.as_json
  39. end
  40. else
  41. # authenticate
  42. if sign_in(user)
  43. if !facebook_user.birthday.nil? && current_user.meta['birthday'].nil?
  44. current_user.meta['birthday'] = facebook_user.birthday
  45. current_user.save!
  46. end
  47. render_api 200, current_user.as_json({:self => true})
  48. else
  49. render_api 500, "Failed to authenticate"
  50. end
  51. end
  52. rescue FbGraph2::Exception => e
  53. puts e
  54. render_api 500, "Failed to login with facebook"
  55. end
  56. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement