Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- identity = Identity.find_for_oauth(auth)
- class User
- include Neo4j::ActiveNode
- has_one :both, :identity, model_class: 'Identity', type: :has
- has_many :both, :friends, model_class: 'User', type: :friends
- property :username, type: String
- property :facebook_token, type: String
- index :facebook_token
- property :created_at, type: DateTime
- property :updated_at, type: DateTime
- property :logged_out, type: DateTime
- ## Database authenticatable
- property :email, type: String, null: false, default: ""
- index :email
- property :encrypted_password
- ## If you include devise modules, uncomment the properties below.
- ## Rememberable
- property :remember_created_at, type: DateTime
- property :remember_token
- index :remember_token
- ## Recoverable
- property :reset_password_token
- index :reset_password_token
- property :reset_password_sent_at, type: DateTime
- ## Trackable
- property :sign_in_count, type: Integer, default: 0
- property :current_sign_in_at, type: DateTime
- property :last_sign_in_at, type: DateTime
- property :current_sign_in_ip, type: String
- property :last_sign_in_ip, type: String
- devise :database_authenticatable, :registerable,
- :recoverable, :rememberable, :trackable, :validatable, :omniauthable
- property :name, type: String
- property :email, type: String
- property :username, type: String
- def self.find_for_oauth(auth, signed_in_resource = nil)
- identity = Identity.find_for_oauth(auth)
- user = signed_in_resource ? signed_in_resource : identity.user
- if user.nil?
- email_is_verified = auth.info.email && (auth.info.verified || auth.info.verified_email)
- email = auth.info.email if email_is_verified
- user = User.where(:email => email).first if email
- # Create the user if it's a new registration
- if user.nil?
- user = User.new(
- name: auth.extra.raw_info.name,
- #username: auth.info.nickname || auth.uid,
- email: email ? email : "#{TEMP_EMAIL_PREFIX}-#{auth.uid}-#{auth.provider}.com",
- password: Devise.friendly_token[0,20]
- )
- user.skip_confirmation!
- user.save!
- end
- end
- # Associate the identity with the user if needed
- if identity.user != user
- identity.user = user
- identity.save!
- end
- user
- end
- end
- class Identity
- include Neo4j::ActiveNode
- property :provider, type: String
- property :uid, type: String
- has_one :in_or_out_or_both, :user, type: :owner
- validates_presence_of :uid, :provider
- validates_uniqueness_of :uid, :scope => :provider
- def self.find_for_oauth(auth)
- find_or_create_by(uid: auth.uid, provider: auth.provider)
- end
- end
- devise_for :users, :skip => [:sessions], controllers: { omniauth_callbacks: 'omniauth_callbacks' }
- as :user do
- get 'signin' => 'devise/sessions#new', :as => :new_user_session
- post 'signin' => 'devise/sessions#create', :as => :user_session
- match 'signout' => 'devise/sessions#destroy', :as => :destroy_user_session,
- :via => Devise.mappings[:user].sign_out_via
- end
- flash: {"discard"=>[], "flashes"=>{"alert"=>"Could not authenticate you from Facebook because "Invalid credentials"."}}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement