kni*_*irr 1 android sinatra omniauth
我正在开发一个Sinatra应用程序,我想使用OmniAuth.到目前为止,我对Web应用程序有类似的东西:
http://codebiff.com/omniauth-with-sinatra
我希望网络应用程序可以通过Android手机使用,它将使用API,通过令牌进行身份验证.这里似乎很好地介绍了API的开发:
目前尚不清楚的是我可能会安排登录程序.据推测,它将沿着这些方向:
关于如何管理第3点,我不是很清楚 - 有没有人有任何建议?
由于没有人似乎有任何建议,这就是我到目前为止所提出的建议.不过,我认为这不是很好.
我已经为用户模型添加了一个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
Run Code Online (Sandbox Code Playgroud)
如果授权有效,则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
Run Code Online (Sandbox Code Playgroud)
所有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
Run Code Online (Sandbox Code Playgroud)
对于公共使用,我只允许SSL连接到服务器.任何改进建议都会受到欢迎.
归档时间: |
|
查看次数: |
1070 次 |
最近记录: |