门卫外键违反访问授权
Doorkeeper Foreign Key Violation on Access Grants
我正在尝试设置 Doorkeeper 以使我的 table Company
拥有访问和授予令牌。我一直在关注 this guide,只是我使用的是公司而不是用户作为资源所有者。
这是我接受预授权提示并发送到 /oauth/authorize
:
后出现的错误
ERROR: insert or update on table "oauth_access_grants" violates foreign key constraint "fk_rails_330c32d8d9"
DETAIL: Key (resource_owner_id)=(2) is not present in table "companies".
我的架构:
add_foreign_key "oauth_access_grants", "companies", column: "resource_owner_id"
add_foreign_key "oauth_access_tokens", "companies", column: "resource_owner_id"
以及我公司模型中的关联:
has_many :access_grants, class_name: 'Doorkeeper::AccessGrant', foreign_key: :resource_owner_id, dependent: :destroy
has_many :access_tokens, class_name: 'Doorkeeper::AccessToken', foreign_key: :resource_owner_id, dependent: :destroy
我还确保核对数据库 (db:reset
) 并重新运行迁移 (db:migrate:reset
)。在这一点上我很困惑。关于我可能遗漏的任何想法?
如果有帮助,我正在使用 Rails 5.2.3、Doorkeeper 5.1.0 和 PostgreSQL 9.6.5。
啊哈,看来我只是需要橡皮鸭它。违反外键约束是因为我试图将我的用户 ID 分配给它,当它正在寻找公司 ID 时(碰巧具有该 ID 的公司不存在)。答案是更新我的 Doorkeeper 配置中的 resource_owner_authenticator
块。
它通常看起来像这样:
resource_owner_authenticator do
User.find_by_id(session[:user_id]) || redirect_to(new_session_url)
end
但是因为我没有将用户指定为资源所有者,所以我需要对其进行修改。在我的例子中,我知道一个用户属于一个公司,所以更新的块看起来像:
resource_owner_authenticator do
unless user = User.find_by_id(session[:user_id])
redirect_to(new_session_url)
end
user.company
end
希望这对未来的人有帮助!
我正在尝试设置 Doorkeeper 以使我的 table Company
拥有访问和授予令牌。我一直在关注 this guide,只是我使用的是公司而不是用户作为资源所有者。
这是我接受预授权提示并发送到 /oauth/authorize
:
ERROR: insert or update on table "oauth_access_grants" violates foreign key constraint "fk_rails_330c32d8d9"
DETAIL: Key (resource_owner_id)=(2) is not present in table "companies".
我的架构:
add_foreign_key "oauth_access_grants", "companies", column: "resource_owner_id"
add_foreign_key "oauth_access_tokens", "companies", column: "resource_owner_id"
以及我公司模型中的关联:
has_many :access_grants, class_name: 'Doorkeeper::AccessGrant', foreign_key: :resource_owner_id, dependent: :destroy
has_many :access_tokens, class_name: 'Doorkeeper::AccessToken', foreign_key: :resource_owner_id, dependent: :destroy
我还确保核对数据库 (db:reset
) 并重新运行迁移 (db:migrate:reset
)。在这一点上我很困惑。关于我可能遗漏的任何想法?
如果有帮助,我正在使用 Rails 5.2.3、Doorkeeper 5.1.0 和 PostgreSQL 9.6.5。
啊哈,看来我只是需要橡皮鸭它。违反外键约束是因为我试图将我的用户 ID 分配给它,当它正在寻找公司 ID 时(碰巧具有该 ID 的公司不存在)。答案是更新我的 Doorkeeper 配置中的 resource_owner_authenticator
块。
它通常看起来像这样:
resource_owner_authenticator do
User.find_by_id(session[:user_id]) || redirect_to(new_session_url)
end
但是因为我没有将用户指定为资源所有者,所以我需要对其进行修改。在我的例子中,我知道一个用户属于一个公司,所以更新的块看起来像:
resource_owner_authenticator do
unless user = User.find_by_id(session[:user_id])
redirect_to(new_session_url)
end
user.company
end
希望这对未来的人有帮助!