スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

SinatraでFacebookのOAuth認証

SinatraでFacebookのOAuth認証してみました。Facebookのライブラリはkoala、セッションの保存はrake-session-mongo、ビューはhamlを使用しています。

app.rb
#coding: utf-8
require 'sinatra/base'
require 'koala'
require 'rack/session/mongo'
require 'uri'

class MyApp < Sinatra::Base
use Rack::Session::Mongo, {
:host => 'localhost:27017',
:db_name => 'test',
:marshal_data => false,
:expire_after => 24 * 3600
}
set :haml, {format: :html5}

MY_HOST = 'http://example.com'
APP_ID = 'your_app_id'
SECRET_KEY = 'your_secret_key'
CALLBACK = MY_HOST + '/callback'
LOGOUT = "https://www.facebook.com/logout.php?next=#{URI.escape(MY_HOST)}&access_token="

def initialize()
super()
@oauth = Koala::Facebook::OAuth.new(APP_ID, SECRET_KEY, CALLBACK)
end

get '/' do
if session[:access_token]
graph = Koala::Facebook::API.new(session[:access_token])
@me = graph.get_object('me')
haml :index
else
haml :login
end
end

get '/login' do
session[:access_token] = nil
redirect @oauth.url_for_oauth_code()
end

get '/logout' do
if session[:access_token]
access_token = session[:access_token]
session[:access_token] = nil
redirect LOGOUT + access_token
else
redirect '/'
end
end

get '/callback' do
if params[:code]
session[:access_token] = @oauth.get_access_token(params[:code])
redirect '/'
end
end
end


views/index.haml
!!! 5
%head
%body
#{@me.to_s}
%a{href: '/logout'}
ログアウト


views/login.haml
!!! 5
%head
%body
%a{href: '/login'}
ログイン
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。