AshAuthentication sign_in fails when using with AshGraphql

Hey, I use AshAuthentication in my User resource with the password strategy.

I want to expose the sign_in_with_password action via AshGraphQL. I’m trying to do it like this:

read_one :sign_in_with_password, :sign_in_with_password do
  as_mutation? true
end

This will give the following error:

** (Spark.Error.DslError) [Marketplace.Accounts.User]
 Queries for actions with metadata must have a type configured on the query.

The sign_in_with_password action on Marketplace.Accounts.User has the following metadata fields:

* token

To generate a new type and include the metadata in that type, provide a new type
name, for example `type :user_with_token`.

To ignore the generated metadata, use the same type as the default.

    (ash_graphql 0.26.2) lib/resource/verifiers/verify_query_metadata.ex:24: anonymous fn/2 in AshGraphql.Resource.Verifiers.VerifyQueryMetadata.verify/1
    (elixir 1.15.5) lib/enum.ex:984: Enum."-each/2-lists^foreach/1-0-"/2
    (ash_graphql 0.26.2) lib/resource/verifiers/verify_query_metadata.ex:12: AshGraphql.Resource.Verifiers.VerifyQueryMetadata.verify/1
    (marketplace 1.3.2) lib/marketplace/accounts/user.ex:1: anonymous fn/1 in Marketplace.Accounts.User.__verify_spark_dsl__/1
    (elixir 1.15.5) lib/enum.ex:984: Enum."-each/2-lists^foreach/1-0-"/2
    (marketplace 1.3.2) lib/marketplace/accounts/user.ex:1: Marketplace.Accounts.User.__verify_spark_dsl__/1
    (elixir 1.15.5) lib/enum.ex:984: Enum."-each/2-lists^foreach/1-0-"/2
    (elixir 1.15.5) lib/module/parallel_checker.ex:271: Module.ParallelChecker.check_module/3
    (elixir 1.15.5) lib/module/parallel_checker.ex:82: anonymous fn/6 in Module.ParallelChecker.spawn/4
** (EXIT from #PID<0.1455.0>) shell process exited with reason: an exception was raised:
    ** (Spark.Error.DslError) [Marketplace.Accounts.User]

What an I doing wrong here?

Fixed it, I was missing this field:

read_one :sign_in_with_password, :sign_in_with_password do
  as_mutation? true

  type_name :user_with_token
end

Maybe the code is a little bit outdated?

Here:

To generate a new type and include the metadata in that type, provide a new type
name, for example `type :user_with_token`.

Shouldn’t it say type_name :user_with_token instead?

That action returns additional metadata, and so cannot use the default type name of :user. To see what I mean, add the type :user_with_token config to your mutation:

read_one :sign_in_with_password, :sign_in_with_password do
  as_mutation? true
  type_name :user_with_metadata
end

EDIT: changed type to type_name in the example above.

There is not type field for read_one queries in AshGraphql, the correct name is type_name

https://hexdocs.pm/ash_graphql/dsl-ashgraphql-resource.html#graphql-queries-read_one

ah, right :slight_smile: That is what I meant. Did that work?

1 Like

Yep, worked great :smile:

1 Like