我可以在没有凭据的情况下向应用程序发送请求吗?

Can I send requests to app with devise without credentials?

我有一个带有设计的后端应用程序和一个离子应用程序,我从中向后端发出请求。
每当我发送请求时,都会显示 401 状态未授权。

在这个项目中,我已经有门卫来管理授权,所以我不需要设计授权。
我能以某种方式让这些请求(添加一些东西到 headers )总是授权而不发送 post 请求凭据?

您需要以某种方式识别用户。如果您不使用会话,则需要生成某种访问令牌,Doorkeeper 可以为您做这件事。我不确定这是否有帮助,但我最近设置了以下流程。

通过受信任的客户端使用 OAuth2 时的一个选项,例如您 build/distribute 自己的前端应用程序是 资源所有者密码凭证授予 。 Doorkeeper 对此有一个 guide in the docs,并提供了处理 Devise 的建议。

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

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'}