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)
这是我的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)