Advertisement
Guest User

Untitled

a guest
Oct 4th, 2015
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. class User < ActiveRecord::Base
  2. devise :database_authenticatable,
  3. :registerable,
  4. :recoverable,
  5. :rememberable,
  6. :trackable,
  7. :validatable,
  8. :omniauthable, omniauth_providers: [:vkontakte]
  9.  
  10.  
  11. def self.from_omniauth(auth)
  12. binding.pry
  13. where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
  14. user.email = auth.info.email
  15. user.password = Devise.friendly_token[0,20]
  16. user.name = auth.info.name # assuming the user model has a name
  17. end
  18. end
  19.  
  20. def self.new_with_session(params, session)
  21. super.tap do |user|
  22. if data = session["devise.vkontakte_data"] && session["devise.vkontakte_data"]["extra"]["raw_info"]
  23. user.email = data["email"] if user.email.blank?
  24. end
  25. end
  26. end
  27. end
  28.  
  29. class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  30. require 'pry'
  31.  
  32. def vkontakte
  33. #binding.pry
  34. @user = User.from_omniauth(request.env["omniauth.auth"])
  35. token = request.env["omniauth.auth"]["credentials"]["token"]
  36. @user = token
  37. @vk = VkontakteApi::Client.new
  38.  
  39. current_user.token = @vk.token
  40. current_user.vk_id = @vk.user_id
  41. current_user.save
  42.  
  43. if @user.persisted?
  44. sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated
  45. set_flash_message(:notice, :success, :kind => "vkontakte") if is_navigational_format?
  46. else
  47. session["devise.vkontakte_data"] = request.env["omniauth.auth"]
  48. redirect_to new_user_registration_url
  49.  
  50. if request.env["omniauth.auth"].info.email.blank?
  51. redirect_to "/users/auth/vkontakte?auth_type=rerequest&scope=email"
  52. end
  53. end
  54. end
  55. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement