【问题标题】:doorkeeper integration with Rails 4 application门卫与 Rails 4 应用程序的集成
【发布时间】:2015-09-19 19:08:20
【问题描述】:

按照门卫 github 自述文件中的说明(我想),我得到了before_action

class ReadingsController < ApplicationController
  before_action :doorkeeper_authorize! # Require access token for all actions
...
end

RubyMine 抱怨:doorkeeper_authorize! 没有在范围内定义。 如果我无论如何运行它,我会得到:

Processing by ReadingsController#index as HTML
Filter chain halted as :doorkeeper_authorize! rendered or redirected
Completed 401 Unauthorized in 48ms (ActiveRecord: 0.0ms)

在控制台上,结果完全空白。当我查看查看源代码时,它看起来像常规结果页面。

嗯,这是失败,还是实际上是在告诉我我未经授权?如果是,我为什么要连接重定向以允许某人实际进行身份验证?

【问题讨论】:

  • Doorkeeper 为 other 网站提供了一种使用由 Doorkeeper 支持的应用程序中的现有帐户进行身份验证的方法。 Doorkeeper 本身不提供身份验证。我可能误解了这个问题,如果是这样,请澄清一下。我不清楚您如何尝试测试所需的行为。
  • 哦,我明白了。 oauth2 提供者。我正在寻找一个 oauth2 消费者。哎呀。
  • 是的,没错!我最近进行了一次工作面试,要求我为此实施a pass-through OAuth2 providera test client。你可能想看看。

标签: ruby-on-rails doorkeeper


【解决方案1】:

a working example I've built a while before 之后,您的代码在一个完全出乎意料的地方失败了:在 Doorkeeper 的初始化程序中,如下所示:

resource_owner_authenticator do
  current_user || begin
    session[:guest_return_url] = request.fullpath
    redirect_to(user_omniauth_authorize_path(:facebook))
  end
end

我不知道在那个块中有什么,但通常它应该返回一个应该被视为资源所有者的对象。门卫失败了,因为该块未能这样做。为了在我的示例中实现这个块,我使用了 Devise 的 current_user 助手和一个备用 redirect_to 来处理用户未通过身份验证的情况(毕竟这是在 before_action 中执行的)。

所以要让门卫“让你进来”,你需要告诉它“如何识别主人”。这是 Doorkeeper 不处理的身份验证

【讨论】:

    猜你喜欢
    • 2017-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多