我正在使用Rails API构建一个简单的api ,并希望确保我在这里正确的轨道.我正在使用设计来处理登录,并决定使用Devise的token_authenticatable选项,它会生成一个API密钥,您需要随每个请求一起发送.
我将API与骨干/牵线木偶前端配对,我一般想知道如何处理会话.我的第一个想法是将api密钥存储在本地存储或cookie中,并在页面加载时检索它,但是从安全的角度来看存储api密钥的方式让我感到困扰.通过查看本地存储/ cookie或嗅探任何经过的请求来获取api密钥并不容易,并使用它来无限期地冒充该用户?我目前正在每次登录时重置api密钥,但即使这样也很频繁 - 任何时候你登录任何设备,这意味着你会被其他人登录,这是一种痛苦.如果我可以放弃这种重置,我觉得从可用性的角度来看它会有所改善.
我可能在这里完全错了(并且希望我是),任何人都可以解释这种方式的认证是否可靠安全,如果不是,那么一个好的替代方案是什么?总的来说,我正在寻找一种方法,我可以安全地保持用户'登录'到API访问,而不经常强制重新认证.
我正在编写一个Rails 4应用程序,它将为尚未开发的移动应用程序公开API.用户将使用移动应用程序中的电子邮件和密码进行身份验证.
虽然我已经找到了很多关于这个主题的信息.很难看出什么是过时的或非最佳的.我已经阅读了HTTP Basic Auth,它看起来似乎不太安全,以及基于HTTP令牌的Auth,但我不确定如何将它与常规电子邮件和密码认证结合起来(我正在使用Devise by方式).
我想知道目前关于如何实现这一目标的最佳实践,所以我一定会采取正确的方式.
我正在研究rails API,我现在正计划为控制器编写一些RSpec测试.我一直在阅读,我无法弄清楚控制器规格和请求规格之间的实际区别是什么,以及如果我正在测试API,我应该使用哪一个.
我想限制所有API控制器的请求被重定向到JSON路径.我想使用重定向,因为URL也应根据响应而改变.
一种选择是使用a before_filter将请求重定向到相同的操作但强制JSON格式.这个例子还没有用!
# base_controller.rb
class Api::V1::BaseController < InheritedResources::Base
before_filter :force_response_format
respond_to :json
def force_response_format
redirect_to, params[:format] = :json
end
end
Run Code Online (Sandbox Code Playgroud)
另一种选择是限制路线设置中的格式.
# routes.rb
MyApp::Application.routes.draw do
namespace :api, defaults: { format: 'json' } do
namespace :v1 do
resources :posts
end
end
end
Run Code Online (Sandbox Code Playgroud)
我希望所有请求都以JSON请求结束:
http://localhost:3000/api/v1/posts
http://localhost:3000/api/v1/posts.html
http://localhost:3000/api/v1/posts.xml
http://localhost:3000/api/v1/posts.json
...
Run Code Online (Sandbox Code Playgroud)
你会推荐哪种策略?
我正在使用rails-api并且需要使用authenticate_with_http_token来处理标头授权令牌,但是我收到以下错误:
NoMethodError (undefined method `authenticate_with_http_token' for ...)
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Rails 4中编写一个Ember应用程序,并决定使用rails-apiapi控制器,同时保持应用程序控制器完好无损的几页不属于单页面应用程序.换句话说,这是我的控制器:
app/controllers/application_controller.rb:
class ApplicationController < ActionController::Base
protect_from_forgery
end
Run Code Online (Sandbox Code Playgroud)
app/controllers/sample_controller.rb:
class SampleController < ApplicationController
# my methods
end
Run Code Online (Sandbox Code Playgroud)
app/controllers/api/v1/api_controller.rb:
class Api::V1::ApiController < ActionController::Api
include ActionController::MimeResponds
end
Run Code Online (Sandbox Code Playgroud)
app/controllers/api/v1/sample_controller.rb:
module Api::V1
class SampleController < ApiController
respond_to :json
# my methods
end
end
Run Code Online (Sandbox Code Playgroud)
我的application.html.slim包含以下行:
== render partial: "flash_msgs" unless flash.blank?
Run Code Online (Sandbox Code Playgroud)
包含哪会导致以下错误:
## ActionDispatch :: Request:0x007f99f41d8720>的未定义方法'flash'
根据这个线程的讨论,似乎罪魁祸首可能是rails-api,但鉴于我已经建立的继承,我并不完全相信.有什么建议?
我一直在研究为使用rails-api的纯JSON rails 4.1应用程序实现facebook,twitter和email/password身份验证的最佳方法.rails应用程序没有视图,只是在Android和iphone应用程序混合本机应用程序之间提供JSON(它们使用离子框架,这是一个编译成本机应用程序的角度应用程序).
在过去,我已经实现了基本身份验证,其中auth_token通过头文件从客户端应用程序传递到Rails API,使用auth中内置的rails没有任何问题,但是从那时起我需要与Facebook和Twitter集成我正在寻找利用oauth的解决方案.
我已经研究了设计,但它似乎与纯粹的JSON api搭配得很好.同样,omniauth似乎依赖于视图和重定向.此外,opro和门卫似乎很适合作为你自己的oauth提供商,但我不知道他们如何处理像facebook和twitter这样的第三方.
人们如何在rails中为纯JSON API应用程序实现多提供程序oauth身份验证?
mobile ruby-on-rails facebook-oauth rails-api ruby-on-rails-4
我正在使用devise(最新版本 - 3.2.0)rails(最新版本 - 4.0.1)
我正在进行简单的身份验证(没有ajax或api)并且收到CSRF真实性令牌的错误.检查下面的POST请求
started POST "/users/sign_in" for 127.0.0.1 at 2013-11-08 19:48:49 +0530
Processing by Devise::SessionsController#create as HTML
Parameters: {"utf8"=>"?",
"authenticity_token"=>"SJnGhXXUXjncnPhCdg3muV2GYCA8CX2LVFV78pqddD4=", "user"=>
{"email"=>"a@a.com", "password"=>"[FILTERED]", "remember_me"=>"0"},
"commit"=>"Sign in"}
Can't verify CSRF token authenticity
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."email" =
'a@a.com' LIMIT 1
(0.1ms) begin transaction
SQL (0.4ms) UPDATE "users" SET "last_sign_in_at" = ?, "current_sign_in_at" = ?,
"sign_in_count" = ?, "updated_at" = ? WHERE "users"."id" = 2 [["last_sign_in_at", Fri,
08 Nov 2013 …Run Code Online (Sandbox Code Playgroud) 我在rails中制作API.对于普通身份验证,我们使用设计,但在API中如何实现设计验证.
gem 'devise_token_auth'
Run Code Online (Sandbox Code Playgroud)
有人更喜欢这个宝石进行身份验证,但没有可用的教程.如何在rails api中实现authenitication?
我最初使用--api标签在rails 5中创建它.
来自http://edgeguides.rubyonrails.org/api_app.html,
我删除了 config.api_only = true
我变了
class ApplicationController < ActionController::API
end
Run Code Online (Sandbox Code Playgroud)
至
class ApplicationController < ActionController::Base
end
Run Code Online (Sandbox Code Playgroud)
我现在遇到的问题是视图被渲染,例如.welcome/index.html.erb,相应的CSS文件assets/stylesheets/welcome.css.scss不是.
知道如何解决这个问题,或者更一般地将API应用程序转换为完整的应用程序?
谢谢!