Secure Rails 5 API

时间:2016-08-27 19:01:13

标签: ruby-on-rails rails-api

我创建了一个Rails 5 API应用程序。我已经设置了为GET请求返回JSON的方法。

数据仅由我维护,因此我希望应用程序为所有类型的数据创建或更新请求返回401。 如何实现这一目标?

另外如果我在控制器文件中注释掉def创建,def更新功能,我将如何更新&使用POST请求创建数据?

  

目的: -

     

设置一个安全的API,只接受来自我的域的GET请求,否则返回401。

     

在身份验证后手动接受POST,UPDATE和DELETE请求。

1 个答案:

答案 0 :(得分:1)

您需要为API设置令牌身份验证。要快速设置一个,您可以安装此gem:

devise-token-auth

只需按照说明设置您的身份验证系统即可。这样,您就可以控制经过身份验证的用户向您的API发出请求。

这个宝石很棒,因为在安装之后你只需要进行一些非常小的调整就可以使它工作,从而保护你的API。

你可能最终会在你的控制器中做这样的事情

before_action: authenticate_user!, only: [:create, :update, ... Any other method you want to protect]`

编辑:阐述

基本上您想要保护一个或多个资源。您还希望使您的API无状态,因此无法保存任何会话数据。

安装gem后,您应该运行:

rails g devise_token_auth:install User auth

这将创建一个用户模型,调整您的routes.rb以安装身份验证模块并创建迁移。

然后你必须rails db:migrate

正如我所说,有许多方法可以保护您的资源,但最常见的方法之一是运行authenticate_user!在控制器的before_action中:

before_action: authenticate_user!, only: [:create, :update, ... Any other method you want to protect]

基本上,从现在开始,用户对受保护方法的每个请求都需要进行身份验证。

我建议您阅读有关身份验证和API的更多信息。但是,从现在开始,要向您的API发出请求,请求的标头必须包含UID,客户端和令牌。 如果不包含这些内容,则会返回401状态作为回复。因此,保护​​您的API免受未经身份验证的请求。

一些有用的教程:

1)link 2)link2