超初心者はこちら。
これが私がやろうとしていることです:
ユーザー X が facebook でログインし、いくつかのアイテムを追加し、それらを見て、ログアウトする基本的な to do リストアプリを構築します。ユーザー Y/Z/M/etc は、ログインして自分の OWN リストを表示したり、自分のアイテムを追加したりできるはずです。
別名: アカウントにログインして自分の情報を表示する標準の Web アプリ。
これまでのところ:
リストを作成し、Facebook でログインし、自分の名前を認識させる機能。
ただし、リストは、私がログインしても、友人が自分のアカウントでログインしても同じままです。
私がしなければならないこと、方法がわからない:
各ユーザーが自分のリストを作成して表示できるようにする必要があり、それに戻って引き続き表示/追加できるようにする必要があります。
これがどのように呼ばれているのかさえわかりません。これは、それぞれ独自のデータセットを持つユーザーのデータベースでしょうか? データのチャンクとして保存できるように、リストを設定する必要がありますか? これと何か関係がありますか : Facebook 認証を使用した Sinatra でのセッションもしそうなら、何?
ここからどこへ行くべきか、チュートリアル、または何をグーグルで調べるべきかについて、本当に基本的な指示を誰かが教えてくれたら、それは素晴らしいことです.
これが私の主なコードです(警告:本当に面倒です):
require 'sinatra'
require 'data_mapper'
require 'time'
require 'rubygems'
require 'json'
require 'omniauth'
require 'omniauth-facebook'
#TODO require 'omniauth-att'
SCOPE = 'email,read_stream'
DataMapper::setup(:default, "sqlite3://#{Dir.pwd}/queue.db")
class SinatraApp < Sinatra::Base
configure do
set :sessions, true
set :inline_templates, true
set :protection, :except => :frame_options
end
class Note
include DataMapper::Resource
property :id, Serial
property :content, Text, :required => true
property :complete, Boolean, :required => true, :default => false
property :created_at, DateTime
property :updated_at, DateTime
end
class User
include DataMapper::Resource
property :id, Serial
property :uid, String
property :name, String
property :created_at, DateTime
end
###### no clue what this does ##############
DataMapper.finalize
DataMapper.auto_upgrade!
enable :session
use OmniAuth::Builder do
provider :facebook, '464630283595639','5e4c7ad43bf111c10287c981d51127a3',:scope => SCOPE, :display => "popup"
#provider :att, 'client_id', 'client_secret', :callback_url => (ENV['BASE_DOMAIN']
end
###### root ##############
get '/' do
if current_user
@notes = Note.all :order => :id.desc
@title = 'Movie Queue'
erb :home
else
' <a href="/sign_in">sign in with Facebook</a>'
end
end
###### authentication ##############
["/sign_in/?", "/signup/?"].each do |path|
get path do
redirect '/auth/facebook'
end
end
get '/auth/:name/callback' do
auth = request.env["omniauth.auth"]
user = User.first_or_create({ :uid => auth["uid"]}, {
:uid => auth["uid"],
:name => auth["first_name"],
:created_at => Time.now })
session[:user_id] = user.id
redirect '/'
end
helpers do
def current_user
@current_user ||= User.get(session[:user_id]) if session[:user_id]
end
end
##list making part###
post '/' do
n = Note.new
n.content = params[:content]
n.save
redirect '/'
end
get '/:id/delete' do
n = Note.get params[:id]
if n.destroy
redirect '/', :notice => 'Note deleted successfully.'
else
redirect '/', :error => 'Error deleting note.'
end
end
get '/:id/complete' do
n = Note.get params[:id]
n.complete = n.complete ? 0 : 1 # flip it
n.save
redirect '/'
end
########## logout and error handlers #############
get '/logout' do
session[:user_id] = nil
redirect '/'
end
get '/auth/failure' do
erb "<h1>Authentication Failed:</h1><h3>message:<h3> <pre>#{params}</pre>"
end
get '/auth/:provider/deauthorized' do
erb "#{params[:provider]} has deauthorized this app."
end
get '/protected' do
throw(:halt, [401, "Not authorized\n"]) unless session[:authenticated]
erb "<pre>#{request.env['omniauth.auth'].to_json}</pre><hr>
<a href='/logout'>Logout</a>"
end
end
########## don't know what this is #############
SinatraApp.run! if __FILE__ == $0