app/models/user.rb
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable, :omniauthable,
:recoverable, :rememberable, :trackable, :validatable
#before_save :ensure_authentication_token
#attr_accessible :email, :password, :uid, :provider
def self.new_with_session(params, session)
super.tap do |user|
if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"]
user.email = data["email"]
end
end
end
def self.find_for_facebook_oauth(auth, signed_in_resource = nil)
user = User.where(:provider => auth.provider, :uid => auth.uid).first
encrypted_token = Devise.friendly_token[0, 20]
unless user
user = User.create( name: auth.extra.raw_info.name,
provider: auth.provider,
uid: auth.uid,
email: auth.info.email,
password: encrypted_token,
fb_access_token: encrypted_token,
profileimage: auth.info.image
)
end
return user
end
def self.find_for_twitter_oauth(auth, signed_in_resource = nil)
user = User.where(:provider => auth.provider, :uid => auth.uid).first
encrypted_token = Devise.friendly_token[0, 20]
unless user
user = User.create( name: auth.info.nickname,
provider: auth.provider,
uid: auth.uid,
email: User.create_quiz_psuedo_email(auth.info.nickname),
password: encrypted_token,
tw_access_token: encrypted_token,
profileimage: auth.info.image
)
end
return user
end
# To create psuedo email for twitter login user.
def self.create_quiz_psuedo_email(twitter_nickname)
"twitter." + twitter_nickname + "@quiz-psuedo-account.socioquiz"
end
def self.find_for_google_oauth2(auth, signed_in_resource = nil)
data = auth.info
user = User.where(:provider => auth.provider, :uid => auth.uid ).first
if user
return user
else
registered_user = User.where(:email => auth.info.email).first
if registered_user
return registered_user
else
encrypted_token = Devise.friendly_token[0, 20]
user = User.create( name: data["name"],
provider: auth.provider,
email: data["email"],
uid: auth.uid,
password: encrypted_token,
gg_access_token: encrypted_token,
profileimage: auth.info.image
)
return user
end
end
end
has_many :quizzes
has_many :oauth_applications, class_name: 'Doorkeeper::Application', as: :owner
end