Ste*_*ven 2 api ruby-on-rails authlogic
我正在使用Authlogic和Rails 3.除了常规的基于浏览器的用户体验(通过表单和诸如此类登录)之外,我还想实现一个API.
Authlogic似乎支持默认情况下不会保留的单一访问令牌.我通过添加GET参数来提供它们,如下所示:
/users.xml?user_credentails=my_single_access_token
Run Code Online (Sandbox Code Playgroud)
问题:有没有办法让Authlogic通过HTTP Basic Auth接受API密钥?Highrise做了这样的事情,允许:
curl -u 605b32dd:X http://sample.highrisehq.com/people/1.xml
Run Code Online (Sandbox Code Playgroud)
与Freshbooks相同:
curl -u insert_token_here:X https://sample.freshbooks.com/api/2.1/xml-in -d '[xml body here]'
Run Code Online (Sandbox Code Playgroud)
我将如何模仿这个功能?我甚至无法弄清楚输入数据(来自表单的postdata,HTTP基本,API令牌)的位置.我把它归结为UserSessions.find没有参数的调用,但是在那之后我忘记了它.
任何帮助将非常感激!
相关问题:如果使用HTTP basic,我还想禁用会话持久性(使其不存储cookie).任何有关这方面的帮助也将不胜感激!
如果您正在实现API,您可以考虑构建一个单独的Rack应用程序,然后将其安装在'/api/1.0/...'并共享您的模型.
这样,您就不会将自己的API与公共路径直接相关联,这可能很难为API用户构建.
一个好的方法是创建一个简单的Sinatra应用程序,它只公开你想要的方法,然后创建一个单独的身份验证策略:
require 'sinatra'
require 'active_support' # all the Rails stuff
require 'lib/user' # your User class
require 'sinatra/respond_to' # gem install sinatra-respond_to
Sinatra::Application.register Sinatra::RespondTo
use Rack::Auth::Basic, "API", do |username, password|
User.find_by_login(username).valid_password?(password)
end
get '/api/1.0/posts' do
@posts = Post.recent # assuming you have a Post model...
respond_to do |wants|
wants.xml { @posts.to_xml }
wants.to_json { @posts.to_json }
end
end
get '/api/1.0/users/:id' do
@user = User.find_by_login(params[:id])
# Careful here - don't release personal details!
respond_to do |wants|
wants.xml { @user.to_xml }
wants.to_json { @user.to_json }
end
end
Run Code Online (Sandbox Code Playgroud)
在路径中使用"1.0"(或类似)对API进行版本控制意味着,如果您更改模型,则可以在不破坏用户现有代码的情况下创建新版API.
使用此方法,您应该能够允许用户使用以下格式使用HTTP Basic进行身份验证:
curl -u steven:password http://example.com/api/1.0/users/steven.xml
curl -u steven:password http://example.com/api/1.0/users/steven.json
curl -u steven:password http://example.com/api/1.0/posts.xml
Run Code Online (Sandbox Code Playgroud)
要使其运行,请将其另存为"api.rb",并将其作为机架中间件运行,或者创建一个"config.ru"文件,如下所示:
require 'api'
run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)
然后从该目录:
rackup
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1216 次 |
| 最近记录: |