gpt4 book ai didi

ruby-on-rails - 使用 API key 时如何跳过设计身份验证?

转载 作者:行者123 更新时间:2023-12-04 00:04:03 25 4
gpt4 key购买 nike

我在我的应用程序上使用 Devise,并希望创建一个全局 API key ,无需登录即可访问任何人帐户的 JSON 数据。

例如,假设我的 API Key 是 1234我有两个用户创建了两个不同的餐厅。

  • 用户 1 - 餐厅 1 (/restaurants/1)
  • 用户 2 - 餐厅 2 (/restaurants/2)

  • 我打开一个全新的浏览器并没有登录任何东西,然后我输入了我的 URL .../restaurants/2.json?api_key=1234 ,我应该能够访问该餐厅的 JSON 数据,而无需以用户 2 身份登录

    最好的方法是什么?

    我关注了 Railscast #352 Securing an API所以我可以通过传入 API key 来访问 JSON 内容,但我必须登录才能看到任何内容。

    编辑 1:使用 CanCan

    我应该提到我也在使用 CanCan 作为角色,但不确定在这种情况下是否会发挥任何作用(双关语不是有意的)。

    编辑 2:使用 API 版本控制实现

    我遵循了 Railscast #350 和 #352,它们教你如何创建 REST API 版本控制以及如何使用 API key 保护它。

    这是我的 Controller /api/v1/restaurants/restaurants_controller.rb 的样子:
    module Api
    module V1
    class RestaurantsController < ApplicationController
    before_filter :restrict_access

    respond_to :json

    def index
    respond_with Restaurant.all
    end

    def show
    respond_with Restaurant.find(params[:id])
    end

    private

    def restrict_access
    api_key = ApiKey.find_by_access_token(params[:api_key])
    head :unauthorized unless api_key
    end
    end
    end
    end

    还有我的 application_controller.rb仍然有 before_filter :authenticate_user!里面的代码。

    解决方案

    我先关注了 Railscast #350 on REST API Versioning并将我所有的 JSON API 调用移至 /apps/api/v1/...
    然后,按照 Steve Jorgensen 下面的解决方案,确保我的 API 模块继承自 ActionController::Base而不是 ApplicationController这样它就绕过了 Devise 的 before_filter :authenticate_user! ApplicationController 中的代码.

    所以,我的编辑 2 代码看起来像这样:
    module Api
    module V1
    class RestaurantsController < ApplicationController
    ...


    module Api
    module V1
    #Replace 'ApplicationController' with 'ActionController::Base'
    class RestaurantsController < ActionController::Base
    ...

    最佳答案

    我知道自从有人问这个问题以来已经有一段时间了,但我想我会再提供一个我过去使用过的选项

    class Api::ApplicationController < ApplicationController

    skip_before_filter :authenticate_user!

    这假设您的 API 目录中有一个应用程序 Controller ,您的所有 api Controller 都从该 Controller 继承。如果没有,您可以将跳过放在每个 Controller 中。

    关于ruby-on-rails - 使用 API key 时如何跳过设计身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11784661/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com