Con Facebook’s API Graph e la creazione del Protocollo Open Graph, ora è più facile che mai leggere e scrivere dati da Facebook a un'applicazione Rails e viceversa nel “social graph”. Ecco alcune delle possibilità:
- Potresti trasformare la tua pagina web in una pagina completa simile a quelle di Facebook, proprio come se ti trovassi all'interno di Facebook.
- Puoi consentire ai tuoi utenti di accedere con le loro credenziali di Facebook e personalizzare la loro esperienza con i parametri ricavati dai loro profili Facebook.
- Potresti aggiungere un Mi piace Aggiungi un pulsante a ogni oggetto della tua pagina, come immagini, brani musicali, articoli, ecc., e indica ai tuoi utenti quali dei loro amici hanno messo “Mi piace” ai tuoi contenuti.
Passaggi per creare un'applicazione e recuperare informazioni
Sono necessari un app_id e un api_secret_key di Facebook
vai al link
https://developers.facebook.com/apps
1. Crea una nuova app su Facebook
-
Inserisci il nome dell'app (esempio: sample_app)
-
quindi dobbiamo inserire le seguenti informazioni
-
Dominio dell'app: localhost
-
URL del sito web: http://localhost/3000/
Nella stessa pagina possiamo trovare l'ID dell'app e il codice segreto dell'app. Appaiono così:
ID app: 378271044441102
Codice segreto dell'app: 567772fd2bef4dda7a404b02r4567c758
2. Crea un'applicazione Rails
Di seguito sono riportati i passaggi per creare applicazione rails
- rails new facebook_app
- sudo gem install fb_graph
- add to Gemfilegem “fb_graph”
- sudo bundle install
- crea pagina indice per fb_loginrails; genera controller; pagine; indice
- set index to root page in config/routes.rbroot :to => “pages#home”
- creare l'autenticazione per l'app (autenticazione semplice)
- creazione di un controller Facebook e di un modello Facebook con :Identifier => string:access_token => string
- Rails genera uno scaffold per Facebook: identifier:string, access_token:string
- rails generate controller dashboard show
- Nel controller "pages", reindirizzare alla pagina dashboard:show se l'utente è già autenticato controller/pages_controller.rb
indice def
redirect_to dashboard_url se l'utente è autenticato?
FINE
Se non si è effettuato l'accesso, verrà caricato il percorso root_path, ovvero pages/index; creare fb_login in questa pagina per effettuare l'accesso.
<% if authenticated? %>
<p><%= link_to “Logout”, facebook_path, :method => :elimina %></p>
<% else %>
<fb:login-button length=”long” onlogin=”location.href = ‘<%= facebook_path %>'” scope=”<%=
Facebook.config[:scope] %>”> </fb:login-button>
<% fine %>
3. Incolla il seguente codice di script (per il pulsante di accesso a Facebook)
<script src=”https://www.railscarma.com/wp-content/uploads/2013/02/all.js”></script>
<script>
FB.init({
appId: “<%= Facebook.config[:client_id] %>”,
cookie: true,
xfbml: true,
oauth: true,
stato: vero
});
</script>
<script type=”text/javascript”>
$(function () {
<% if flash[:error] %>
$.gritter.add({
title: “<%= flash[:error][:title] %>”,
text : “<%= flash[:error][:message] %>”,
image: “<%= flash[:error][:image] %>”,
time : 5000
});
<% elsif flash[:notice] %>
$.gritter.add({
title: “<%= flash[:notice][:title] %>”,
text : “<%= flash[:notice][:message] %>”,
image: “<%= flash[:notice][:image] %>”,
time : 3000
});
<% fine %>
});
</script>
The above code is used to authenticate user through facebook, after authenticating user should redirect to dashboard url to show his information fetched from facebook. some facebook settings should be code in facebook model, and controller.
In controller/facebook_controller.rb.
before_filter :require_authentication, :only => :destroy
rescue_from Rack::OAuth2::Client::Error, :with => :oauth2_error
# handle Facebook Auth Cookie generated by JavaScript SDK
sicuramente spettacolo
auth = Facebook.auth.from_cookie(cookies)
authenticate Facebook.identify(auth.user)
redirect_to dashboard_url
FINE
# handle Normal OAuth flow: start
sicuramente nuovo
client = Facebook.auth(callback_facebook_url).client
redirect_to client.authorization_uri(
:scope => Facebook.config[:scope]
)
FINE
# handle Normal OAuth flow: callback
sicuramente creare
client = Facebook.auth(callback_facebook_url).client
client.authorization_code = params[:code]
access_token = client.access_token! :client_auth_body
user = FbGraph::User.me(access_token).fetch
authenticate Facebook.identify(user)
redirect_to dashboard_url
FINE
sicuramente distruggere
unauthenticate
redirect_to root_url
FINE
privato
def oauth2_error(e)
flash[:error] = {
:title => e.response[:error][:type],
:message => e.response[:error][:message]
}
redirect_to root_url
FINE
4. Paste this code in facebook.rb
def profile
@profile ||= FbGraph::User.me(self.access_token).fetch
FINE
class << self
extend ActiveSupport::Memoizable
def config
@config ||= if ENV[‘fb_client_id’] && ENV[‘fb_client_secret’] && ENV[‘fb_scope’] && ENV[‘fb_canvas_url’]
{
:client_id => ENV[‘fb_client_id’],
:client_secret => ENV[‘fb_client_secret’],
:scope => ENV[‘fb_scope’],
:canvas_url => ENV[‘fb_canvas_url’]
}
altro
YAML.load_file(“#{Rails.root}/config/facebook.yml”)[Rails.env].symbolize_keys
FINE
rescue Errno::ENOENT => e
raise StandardError.new(“config/facebook.yml could not be loaded.”)
FINE
def app
FbGraph::Application.new config[:client_id], :secret => config[:client_secret]
FINE
def auth(redirect_uri = nil)
FbGraph::Auth.new config[:client_id], config[:client_secret], :redirect_uri => redirect_uri
FINE
def identify(fb_user)
_fb_user_ = find_or_initialize_by_identifier(fb_user.identifier.try(:to_s))
_fb_user_.access_token = fb_user.access_token.access_token
_fb_user_.save!
_fb_user_
FINE
FINE
Now we are ready to get user info if he authenticated, once he authenticate page will redirect to dashboard_url,
code in controller/dashboard_controller.rb
before_filter :require_authentication k
view for dashboard/show.html.erb
<h2>Profilo utente</h2>
<dl>
<dt>Username</dt>
<dd><%= current_user.profile.username %></dd>
<dt>Name</dt>
<dd><%= current_user.profile.name %></dd>
<dt>First Name</dt>
<dd><%= current_user.profile.first_name %></dd>
<dt>Middle Name</dt>
<dd><%= current_user.profile.middle_name %></dd>
<dt>Last Name</dt>
<dd><%= current_user.profile.last_name %></dd>
<dt>Gender</dt>
<dd><%= current_user.profile.gender %></dd>
<dt>Link</dt>
<dd><%= link_to current_user.profile.link, current_user.profile.link %></dd>
<dt>Email</dt>
<dd><%= current_user.profile.email %></dd>
<dt>About</dt>
<dd><%= current_user.profile.about %></dd>
<dt>Birthday</dt>
<dd><%= current_user.profile.birthday %></dd>
<dt>Work</dt></dl>
The above code is to show user information.
5. Finally create facebook.rb file in config
development: &defaults
client_id: “your facebook app_id”
client_secret: “facebook secret id”
scope: user_about_me,friends_about_me,user_activities,friends_activities,user_birthday,
friends_birthday,user_checkins,friends_checkins,user_education_history,
friends_education_history,user_events,friends_events,user_groups,friends_groups,
user_hometown,friends_hometown,user_interests,friends_interests,user_likes,friends_likes,
user_location,friends_location,user_notes,friends_notes,user_online_presence,
friends_online_presence,user_photo_video_tags,friends_photo_video_tags,user_photos
test:
<<: *defaults
production:
<<: *defaults
Mettiti in contatto con noi.