| # |
| # 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 |