OSDN Git Service

add: omniauth
[pettanr/pettanr.git] / app / models / user.rb
index 11d7d12..69ca60d 100644 (file)
@@ -5,14 +5,25 @@ class User < ActiveRecord::Base
   # Include default devise modules. Others available are:
   # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
   devise :database_authenticatable, :registerable,
-         :recoverable, :rememberable, :trackable,  :validatable#, :confirmable
-
-
+         :recoverable, :rememberable, :trackable,  :validatable, 
+         :omniauthable, :omniauth_providers => [:twitter, :google_oauth2]
+         #, :confirmable
+  
   def create_token
-    self.ensure_authentication_token
+    loop do
+      token = Devise.friendly_token
+      if token_suitable?(token)
+        self.authentication_token = token
+        break
+      end
+    end
     self.save
   end
   
+  def token_suitable?(token)
+    !self.class.exists?(authentication_token: token)
+  end
+  
   def delete_token
     self.authentication_token = nil
     self.save
@@ -40,6 +51,28 @@ class User < ActiveRecord::Base
     res
   end
   
+  def self.from_omniauth(auth)
+    where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
+      user.name = auth.info.nickname
+      user.email = auth.info.email
+    end
+  end
+  
+  def self.new_with_session(params, session)
+    if session["devise.user_attributes"]
+      new(session["devise.user_attributes"], without_protection: true) do |user|
+        user.attributes = params
+        user.valid?
+      end
+    else
+      super
+    end
+  end
+  
+  def password_required?
+    super && provider.blank?
+  end
+  
   private
   def user_params
     params.require(:user).permit(:email, :password, :password_confirmation, :remember_me, :authentication_token)