标签: rails-api

设计的token_authenticatable安全吗?

我正在使用Rails API构建一个简单的api ,并希望确保我在这里正确的轨道.我正在使用设计来处理登录,并决定使用Devise的token_authenticatable选项,它会生成一个API密钥,您需要随每个请求一起发送.

我将API与骨干/牵线木偶前端配对,我一般想知道如何处理会话.我的第一个想法是将api密钥存储在本地存储或cookie中,并在页面加载时检索它,但是从安全的角度来看存储api密钥的方式让我感到困扰.通过查看本地存储/ cookie或嗅探任何经过的请求来获取api密钥并不容易,并使用它来无限期地冒充该用户?我目前正在每次登录时重置api密钥,但即使这样也很频繁 - 任何时候你登录任何设备,这意味着你会被其他人登录,这是一种痛苦.如果我可以放弃这种重置,我觉得从可用性的角度来看它会有所改善.

我可能在这里完全错了(并且希望我是),任何人都可以解释这种方式的认证是否可靠安全,如果不是,那么一个好的替代方案是什么?总的来说,我正在寻找一种方法,我可以安全地保持用户'登录'到API访问,而不经常强制重新认证.

authentication api ruby-on-rails devise rails-api

76
推荐指数
2
解决办法
2万
查看次数

Rails API:实现身份验证的最佳方式?

我正在编写一个Rails 4应用程序,它将为尚未开发的移动应用程序公开API.用户将使用移动应用程序中的电子邮件和密码进行身份验证.

虽然我已经找到了很多关于这个主题的信息.很难看出什么是过时的或非最佳的.我已经阅读了HTTP Basic Auth,它看起来似乎不太安全,以及基于HTTP令牌的Auth,但我不确定如何将它与常规电子邮件和密码认证结合起来(我正在使用Devise by方式).

我想知道目前关于如何实现这一目标的最佳实践,所以我一定会采取正确的方式.

ruby-on-rails rails-api ruby-on-rails-4

76
推荐指数
2
解决办法
4万
查看次数

控制器规格与请求规格?

我正在研究rails API,我现在正计划为控制器编写一些RSpec测试.我一直在阅读,我无法弄清楚控制器规格和请求规格之间的实际区别是什么,以及如果我正在测试API,我应该使用哪一个.

rspec ruby-on-rails rails-api

30
推荐指数
3
解决办法
8048
查看次数

Rails:将API请求限制为JSON格式

我想限制所有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)

你会推荐哪种策略?

redirect json ruby-on-rails restriction rails-api

24
推荐指数
3
解决办法
2万
查看次数

你如何在rails-api中使用authenticate_with_http_token?

我正在使用rails-api并且需要使用authenticate_with_http_token来处理标头授权令牌,但是我收到以下错误:

NoMethodError (undefined method `authenticate_with_http_token' for ...)
Run Code Online (Sandbox Code Playgroud)

rails-api

24
推荐指数
1
解决办法
3476
查看次数

ActionDispatch :: Request的未定义方法`flash'

我正在尝试在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,但鉴于我已经建立的继承,我并不完全相信.有什么建议?

ruby-on-rails rails-api ruby-on-rails-4

22
推荐指数
3
解决办法
1万
查看次数

Rails JSON API oauth身份验证

我一直在研究为使用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

22
推荐指数
1
解决办法
2710
查看次数

设计用户sign_in为CSRF令牌真实性令牌提供身份验证错误

我正在使用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)

ruby-on-rails csrf devise rails-api ruby-on-rails-4

19
推荐指数
3
解决办法
1万
查看次数

基于令牌的Rails JSON API身份验证

我在rails中制作API.对于普通身份验证,我们使用设计,但在API中如何实现设计验证.

gem 'devise_token_auth'
Run Code Online (Sandbox Code Playgroud)

有人更喜欢这个宝石进行身份验证,但没有可用的教程.如何在rails api中实现authenitication?

ruby ruby-on-rails devise rails-api ruby-on-rails-4

18
推荐指数
2
解决办法
1万
查看次数

如何将Rails 5 API应用程序转换为可以充当API和应用程序的rails应用程序?

我最初使用--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应用程序转换为完整的应用程序?

谢谢!

ruby-on-rails rails-api ruby-on-rails-5

18
推荐指数
3
解决办法
3792
查看次数