do not use devise strategy for api auth
This commit is contained in:
@@ -33,6 +33,17 @@ module Api
|
|||||||
result
|
result
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def authenticate_user!
|
||||||
|
@current_user ||=
|
||||||
|
if request.headers['X-Auth-Token'].present?
|
||||||
|
sha256 = Digest::SHA256.hexdigest(request.headers['X-Auth-Token'])
|
||||||
|
|
||||||
|
User.joins(:access_token).find_by(access_token: { sha256: })
|
||||||
|
end
|
||||||
|
|
||||||
|
render json: { error: 'Not authenticated' }, status: :unauthorized unless current_user
|
||||||
|
end
|
||||||
|
|
||||||
def current_account
|
def current_account
|
||||||
current_user&.account
|
current_user&.account
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,9 +1,5 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative '../../lib/auth_with_token_strategy'
|
|
||||||
|
|
||||||
Warden::Strategies.add(:auth_token, AuthWithTokenStrategy)
|
|
||||||
|
|
||||||
Devise.otp_allowed_drift = 60.seconds
|
Devise.otp_allowed_drift = 60.seconds
|
||||||
|
|
||||||
# Assuming you have not yet modified this file, each configuration option below
|
# Assuming you have not yet modified this file, each configuration option below
|
||||||
@@ -279,7 +275,7 @@ Devise.setup do |config|
|
|||||||
#
|
#
|
||||||
config.warden do |manager|
|
config.warden do |manager|
|
||||||
# manager.intercept_401 = false
|
# manager.intercept_401 = false
|
||||||
manager.default_strategies(scope: :user).unshift(:auth_token)
|
# manager.default_strategies(scope: :user).unshift(:auth_token)
|
||||||
end
|
end
|
||||||
|
|
||||||
# ==> Mountable engine configurations
|
# ==> Mountable engine configurations
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
class AuthWithTokenStrategy < Devise::Strategies::Base
|
|
||||||
def valid?
|
|
||||||
request.headers['X-Auth-Token'].present?
|
|
||||||
end
|
|
||||||
|
|
||||||
def authenticate!
|
|
||||||
sha256 = Digest::SHA256.hexdigest(request.headers['X-Auth-Token'])
|
|
||||||
|
|
||||||
user = User.joins(:access_token).find_by(access_token: { sha256: })
|
|
||||||
|
|
||||||
if user
|
|
||||||
success!(user)
|
|
||||||
else
|
|
||||||
fail!('Invalid token')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
Reference in New Issue
Block a user