blob: 52a6af9ce343e5dad5c009236f46364f0d70add2 [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:omniauthable, omniauth_providers: [:facebook, :google_oauth2]
has_many :databundles, class_name: 'DataBundle'
validates :email, presence: true, uniqueness: true
def self.from_omniauth(auth)
# Find user by omniauth
# If exist user with uid, return it
user = where(provider: auth.provider, uid: auth.uid).first
return user if user
# Or if exist user with email, return it
user = where(email: auth.info.email).first
return user if user
# Create the user if it's a new registration
create do |user|
user.provider = auth.provider
user.uid = auth.uid
user.email = auth.info.email
user.password = Devise.friendly_token[0, 20]
user.firstname = auth.info.first_name
user.lastname = auth.info.last_name
end
end
end