我可以使用没有凭证的设备向app发送请求吗?

时间:2015-03-19 19:34:26

标签: ruby-on-rails rest devise

我有设计后端应用程序和一个离子应用程序,我可以从中请求后端 每当我发送请求时,都会获得未经授权的401状态。

在这个项目中,我已经有了管理授权的门卫,所以我不需要设计授权。
我可以以某种方式将这些请求(添加到标题中的内容)总是授权而不发送带凭证的帖子请求吗?

1 个答案:

答案 0 :(得分:1)

您需要以某种方式识别用户。如果您没有使用会话,则需要生成某种访问令牌,门卫可以为您执行此操作。我不确定这是否有用,但我最近设置了以下流程。

通过受信任的客户端使用OAuth2时的一个选项,例如您自己构建/分发的前端应用程序是资源所有者密码凭据授权。门卫有一个guide in the docs这个与处理Devise的建议。

我在门卫初始化器中得到了类似的东西。您不需要授权客户,因为您信任它:

resource_owner_from_credentials do |routes|
  request.params[:user] = {:email => request.params[:email], :password => request.params[:password]}
  request.env['devise.allow_params_authentication'] = true
  request.env['warden'].authenticate!(:scope => :user)
end

skip_authorization do |resource_owner|
  true
end

然后您应该能够使用密码授予类型发送请求,如下所示(也显示在文档中)。

RestClient.post 'http://localhost:3000/oauth/token', {grant_type: 'password', email: 'email@gmail.com', password: 'password'}, {:accept => 'application/json'}

您应该收到与文档中显示的相同的JSON。

{
  "access_token": "1f0af717251950dbd4d73154fdf0a474a5c5119adad999683f5b450c460726aa",
  "token_type": "bearer",
  "expires_in": 7200
}

现在您可以识别用户了。您只需将此令牌附加到受doorkeeper_for保护的端点的每个请求。

RestClient.get 'http://localhost/api/v1/users', { 'Authorization' => 'Bearer 1f0af717251950dbd4d73154fdf0a474a5c5119adad999683f5b450c460726aa', :accept => 'application/json'}