超级初学者在这里。
这就是我想做的事情:
构建一个基本的待办事项列表应用程序,用户 X 在其中使用 facebook 登录,添加一些项目,查看它们,然后注销。用户 Y/Z/M/etc,应该能够登录查看他们的 OWN 列表、添加他们的 OWN 项目等
。AKA:一个标准的 Web 应用程序,您可以在其中登录到您的帐户并查看您自己的信息。
到目前为止我所拥有的:
能够建立一个列表,使用 Facebook 登录并让它知道你的名字。
但是,无论我登录还是我的朋友使用她的帐户登录,该列表都保持不变。
我需要做什么,但不知道如何:
我需要每个用户都能够创建和查看他们自己的列表,并且能够回到它并仍然看到它/添加到它等等。
我什至不知道这怎么叫,这会是一个用户数据库,每个用户都有自己的数据集吗?是否需要设置列表以便将它们存储为一大块数据?是否与此有关:Sinatra 中的会话使用 Facebook 身份验证如果是,那是什么?
如果有人能给我一些非常基本的方向,告诉我从哪里开始,任何教程或我应该在谷歌上搜索什么,那就太棒了。
这是我的主要代码(警告:它真的很乱):
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