我创建了一个Rails 5 API应用程序。我已经设置了为GET请求返回JSON的方法。
数据仅由我维护,因此我希望应用程序为所有类型的数据创建或更新请求返回401。 如何实现这一目标?
另外如果我在控制器文件中注释掉def创建,def更新功能,我将如何更新&使用POST请求创建数据?
目的: -
设置一个安全的API,只接受来自我的域的GET请求,否则返回401。
在身份验证后手动接受POST,UPDATE和DELETE请求。
答案 0 :(得分:1)
您需要为API设置令牌身份验证。要快速设置一个,您可以安装此gem:
只需按照说明设置您的身份验证系统即可。这样,您就可以控制经过身份验证的用户向您的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免受未经身份验证的请求。
一些有用的教程: