Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'fb_graph'
- require 'httparty'
- require 'thin'
- class Api::SessionsController < Api::BaseController
- before_filter :authenticate_user!, :except => [:create, :destroy]
- before_filter :ensure_params_exist, :only => [:create]
- respond_to :json
- def create
- Thin::Logging.log('Creating session')
- case params[:method]
- when 'livresco'
- Thin::Logging.log('Livresco')
- handle_livresco
- when 'facebook'
- Thin::Logging.log('Facebook')
- handle_facebook
- when 'google'
- Thin::Logging.log('Google')
- handle_google
- else
- render :json => {:success=>false, :message=>"No valid method specified"}, :status=>422
- end
- end
- def handle_facebook
- Thin::Logging.log("Handling facebook login")
- user = FbGraph::User.me(params[:user_login][:token]).fetch
- if user.email.nil?
- render :json => {:success=>false, :message=>"Invalid token"}, :status=>422
- return
- end
- Thin::Logging.log("fbgraph email: " + email)
- Thin::Logging.log("param email: " + params[:user_login][:email])
- if user.email != params[:user_login][:email]
- render :json => {:success=>false, :message=>"email mismatch"}, :status=>422
- return
- end
- resource = User.find_by_email(email)
- if resource
- sign_in(:user, resource)
- resource.ensure_authentication_token!
- render :json=> {:success=>true, :auth_token=>resource.authentication_token, :email=>resource.email}
- return
- else
- # create user account
- user = User.new(:email => email, :password => Devise.friendly_token[0,20])
- if user.save
- render :json=> user.as_json(:auth_token=>user.authentication_token, :email=>user.email), :status=>201
- return
- else
- warden.custom_failure!
- render :json=> user.errors, :status=>422
- end
- end
- end
- end
Add Comment
Please, Sign In to add comment