API 使用 grape 和 rails 进行密钥验证

API key authentication with grape and rails

这是我的api/authentication/request.rb

module Authentication
  class Request < Grape::API
    version 'v1', using: :path

    helpers do
      def authenticate(token)
        error!('401 Unauthorized', 401) unless (AccessToken.where(token: params[:token]))
      end
    end

    resource :request do
      get :index

      params do
        Authreq.all
      end
    end

    params do
      requires :id, type: Integer
    end

    resource :request do
      get :all do
        params do
          requires :email ,type: String
        end

        Authreq.all
      end

      params do
        requires :email_id ,type: String
        requires :website ,type: String
        requires :token, type: String
      end

      post :authreq do
        authenticate(:token)

        Authreq.create!(
          email: params[:email_id],
          site_name: params[:website],
          accepted: 0
        )
      end
    end
  end
end

顺便说一句, 我的 AccessToken 模型如下:

class AccessToken < ActiveRecord::Base
  before_create :generate_token

  private

  def generate_token
    begin
      self.token = SecureRandom.hex
    end while self.class.exists?(token: token)
  end
end

但我不知道为什么这会变得无效。身份验证不起作用。我想使用 Rails 对 Grape 使用基于 API 密钥的身份验证,我使用 devise btw.

如果有人对如何实现身份验证和授权有任何其他想法,那就太棒了!

自己想出来的,

授权函数如下:

helpers do
  def authenticate(token)
      error!('401 Unauthorized', 401) unless AuthToken.where(access_token: token).present?
  end
end

并调用函数进行身份验证

喜欢

authenticate(params[:token])

前提是我要求用户输入令牌(使用 requires :token,类型:String)