【发布时间】:2017-04-01 12:40:22
【问题描述】:
我正在覆盖 Doorkeepers AuthorizationsController。正如docs 建议的那样,我从AuthorizationsController 继承。现在下面的代码显示了我最近的覆盖尝试。
我目前拥有的
基本上,在new Authorization Doorkeeper process 周围添加一个额外的 if 语句。我添加了第 3-7 行,目前运行良好。如果第 6 行等于 true,它会返回我 :error。
我的问题
我仍然可以通过浏览器 URL 和服务器日志看到 AccessToken。所以作为一个用户,我仍然可以使用这个 AccessToken 来检索一些数据,例如 Postman。即使它在登录时给了我一个错误。这是为什么呢?我怎样才能防止这种情况发生?
class AuthorizationsController < Doorkeeper::AuthorizationsController
def new
application = Application.find(authorization.authorize.pre_auth.client.id)
resource_owner = User.find(current_resource_owner)
if application.users.exclude?(resource_owner) && application.owner != resource_owner
render :error
elsif pre_auth.authorizable?
if skip_authorization? || matching_token?
auth = authorization.authorize
redirect_to auth.redirect_uri
else
render :new
end
else
render :error
end
end
end
如果您检查由 DigitalOcean 编写的 introduction 到 OAuth2,我的 if 语句在第 3 步“用户代理接收带有重定向 URI 的访问令牌”上仍然成功,因为我可以在浏览器 URL 中看到带有重定向 URI 的 AccessToken .在第 3 步之后,它给了我:error。
更新
在我对 AuthorizationsController 的覆盖开始之前,生成 AccessToken 的整个过程已经完成。我添加了一个简单的before_action 以打印到服务器日志,但在此之前Doorkeeper::AccessToken Load (0.9ms) SELECT 'oauth_access_tokens'.* FROM 'oauth_access_tokens' WHERE 'oauth_access_tokens'.'token' = 'x' LIMIT 1 发生。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 doorkeeper