Sha256: 2a09b2349e77bfd6e4123a9c9d5d4426a29302008cc9ef8506623e13f1024e45

Contents?: true

Size: 1.8 KB

Versions: 8

Compression:

Stored size: 1.8 KB

Contents

module GraphqlDevise
  module Mutations
    class Login < Base
      argument :email,    String, required: true
      argument :password, String, required: true

      field :credentials, GraphqlDevise::Types::CredentialType, null: false

      def resolve(email:, password:)
        resource = find_resource(
          :email,
          get_case_insensitive_field(:email, email)
        )

        if resource && active_for_authentication?(resource)
          if invalid_for_authentication?(resource, password)
            raise_user_error(I18n.t('graphql_devise.sessions.bad_credentials'))
          end

          new_headers = set_auth_headers(resource)
          controller.sign_in(:user, resource, store: false, bypass: false)

          yield resource if block_given?

          { authenticatable: resource, credentials: new_headers }
        elsif resource && !active_for_authentication?(resource)
          if locked?(resource)
            raise_user_error(I18n.t('graphql_devise.mailer.unlock_instructions.account_lock_msg'))
          else
            raise_user_error(I18n.t('graphql_devise.sessions.not_confirmed', email: resource.email))
          end
        else
          raise_user_error(I18n.t('graphql_devise.sessions.bad_credentials'))
        end
      end

      private

      def invalid_for_authentication?(resource, password)
        valid_password = resource.valid_password?(password)

        (resource.respond_to?(:valid_for_authentication?) && !resource.valid_for_authentication? { valid_password }) ||
          !valid_password
      end

      def active_for_authentication?(resource)
        !resource.respond_to?(:active_for_authentication?) || resource.active_for_authentication?
      end

      def locked?(resource)
        resource.respond_to?(:locked_at) && resource.locked_at
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
graphql_devise-0.12.3 lib/graphql_devise/mutations/login.rb
graphql_devise-0.12.2 lib/graphql_devise/mutations/login.rb
graphql_devise-0.12.1 lib/graphql_devise/mutations/login.rb
graphql_devise-0.12.0 lib/graphql_devise/mutations/login.rb
graphql_devise-0.11.4 lib/graphql_devise/mutations/login.rb
graphql_devise-0.11.3 lib/graphql_devise/mutations/login.rb
graphql_devise-0.11.2 lib/graphql_devise/mutations/login.rb
graphql_devise-0.11.1 lib/graphql_devise/mutations/login.rb