誰も何も示唆していないようだから、これまで私がこれまで考え出してきたことは次のとおりです。私はそれがとても良いとは思わない。
私は、ユーザーが最初に認証されたときに作成されたユーザモデルにAPIキーを追加しました:
class User
include DataMapper::Resource
property :id, Serial, :key => true
property :uid, String
property :name, String
property :nickname, String
property :created_at, DateTime
property :api_key, String, :key => true
end
....
get '/auth/:name/callback' do
auth = request.env["omniauth.auth"]
user = User.first_or_create({ :uid => auth["uid"]},
{ :uid => auth["uid"],
:nickname => auth["info"]["nickname"],
:name => auth["info"]["name"],
:api_key => SecureRandom.hex(20),
:created_at => Time.now })
session[:user_id] = user.id
session[:api_key] = user.api_key
flash[:info] = "Welcome, #{user.name}"
redirect "/success/#{user.id}/#{user.api_key}"
end
承認が動作する場合は、API_KEYはおそらく意志Androidアプリに供給され、どこかのデバイス上でそれを格納します。
get '/success/:id/:api_key', :check => :valid_key? do
user = User.get(params[:id],params[:api_key])
if user.api_key == params[:api_key]
{'api_key' => user.api_key}.to_json
else
error 401
end
end
すべてのAPIコールは私のオリジナルのポスト内のリンクのように保護されています:
register do
def check (name)
condition do
error 401 unless send(name) == true
end
end
end
helpers do
def valid_key?
user = User.first(:api_key => params[:api_key])
if !user.nil?
return true
end
return false
end
end
公開用には、サーバーへのSSL接続のみを許可します。改善のための提案は歓迎されるでしょう。
+1あなた自身の解決策を取り戻す – ksiomelo