Sha256: 89ed3790a751410a7c0b2337f9a1831b8c0c01ce338d87c3937c0552089f6cd4

Contents?: true

Size: 1.18 KB

Versions: 1

Compression:

Stored size: 1.18 KB

Contents

module Spree
  module Api
    class OauthsController < BaseController
      skip_before_action :authenticate_user

      def token
        result = catch(:warden) do
          try_authenticate_user
        end

        case result
        when Spree::User
          render json: token_response_json(result)
        when Hash
          render status: :unauthorized, json: { error: I18n.t(result[:message], scope: 'devise.failure') }
        else
          render status: :unauthorized, json: { error: I18n.t(:invalid_credentials, scope: 'solidus_jwt') }
        end
      end

      private

      def token_response_json(user)
        expires_in = SolidusJwt::Config.jwt_expiration

        {
          token_type: 'bearer',
          access_token: user.generate_jwt(expires_in: expires_in),
          expires_in: expires_in,
          refresh_token: generate_refresh_token_for(user)
        }
      end

      def try_authenticate_user
        warden.authenticate(:solidus_jwt_password) ||
          warden.authenticate(:solidus_jwt_refresh_token)
      end

      def generate_refresh_token_for(user)
        token_resource = user.auth_tokens.create!
        token_resource.token
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
solidus_jwt-1.1.0 app/controllers/spree/api/oauths_controller.rb