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