Create a token

Problem

You need to create a token in the current database.

Solution

Use the Login function:

try
{
    Value result = await client.Query(
        Login(
            Ref(Collection("characters"), "181388642114077184"),
            Obj("password", "abracadabra")
        )
    );
    Console.WriteLine(result);
}
catch (Exception e)
{
    Console.WriteLine($"ERROR: {e.Message}");
}
ObjectV(ref: RefV(id = "309834562535424512", collection = RefV(id = "tokens")),ts: LongV(1631740114630000),instance: RefV(id = "181388642114077184", collection = RefV(id = "characters", collection = RefV(id = "collections"))),secret: StringV(fnEETMDknxACAARMwOIEYAYAhr4xpyR13i1E4TokiFwAYsPz0LE))
result, err := client.Query(
	f.Login(
		f.Ref(f.Collection("characters"), "181388642114077184"),
		f.Obj{"password": "abracadabra"},
	))

if err != nil {
	fmt.Fprintln(os.Stderr, err)
} else {
	fmt.Println(result)
}
map[instance:{181388642114077184 0xc000109bc0 0xc000109bc0 <nil>} ref:{309834289381376512 0xc000109a10 0xc000109a10 <nil>} secret:fnEETMClBdACAARMwKQSgAIAKgw15g2WZCeCm3bkvhfEzvWDmpI ts:1631739854140000]
client.query(
  q.Login(
    q.Ref(q.Collection('characters'), '181388642114077184'),
    { password: 'abracadabra' },
  )
)
.then((ret) => console.log(ret))
.catch((err) => console.error(
  'Error: [%s] %s: %s',
  err.name,
  err.message,
  err.errors()[0].description,
))
{
  ref: Ref(Tokens(), "309833836335727104"),
  ts: 1631739422080000,
  instance: Ref(Collection("characters"), "181388642114077184"),
  secret: 'fnEETMA7ijACAARMwDsk0AYAu4E51VmH1w-Xm7qk8T6eJcbinkI'
}
result = client.query(
  q.login(
    q.ref(q.collection("characters"), "181388642114077184"),
    {"password": "abracadabra"}
  )
)
print(result)
{'ref': Ref(id=309834127742337536, collection=Ref(id=tokens)), 'ts': 1631739699980000, 'instance': Ref(id=181388642114077184, collection=Ref(id=characters, collection=Ref(id=collections))), 'secret': 'fnEETMB_Y2ACAARMwH7g0AYAw183rIQzi0_4AnRBYTUf15JxUg8'}
Login(
  Ref(Collection("characters"), "181388642114077184"),
  { password: "abracadabra" },
)
{
  ref: Ref(Tokens(), "309833029179671040"),
  ts: 1631738652300000,
  instance: Ref(Collection("characters"), "181388642114077184"),
  secret: 'fnEETL9_m_ACAARMv36xQAYA0e8RzC8kR9TQDLEM5tEpq79-w_M'
}
Query metrics:
  •    bytesIn:  118

  •   bytesOut:  313

  • computeOps:    1

  •    readOps:    1

  •   writeOps:    1

  •  readBytes:  214

  • writeBytes:  414

  •  queryTime: 28ms

  •    retries:    0

You can also create one directly, if the identity document does not have any credentials defined:

try
{
    Value result = await client.Query(
        Create(
            Tokens(),
            Obj(
                "instance", Ref(
                    Collection("characters"),
                    "181388642114077184"
                )
            )
        )
    );
    Console.WriteLine(result);
}
catch (Exception e)
{
    Console.WriteLine($"ERROR: {e.Message}");
}
ObjectV(ref: RefV(id = "309834558324343296", collection = RefV(id = "tokens")),ts: LongV(1631740110630000),instance: RefV(id = "181388642114077184", collection = RefV(id = "characters", collection = RefV(id = "collections"))),secret: StringV(fnEETMDjpBACAARMwOIEYAYAO2NCSaJssZSdlcXUlgZmw70FnfE))
result, err := client.Query(
	f.Create(
		f.Tokens(),
		f.Obj{
			"instance": f.Ref(
				f.Collection("characters"),
				"181388642114077184",
			),
		},
	),
)

if err != nil {
	fmt.Fprintln(os.Stderr, err)
} else {
	fmt.Println(result)
}
map[instance:{181388642114077184 0xc000180660 0xc000180660 <nil>} ref:{309834288701899264 0xc0001804b0 0xc0001804b0 <nil>} secret:fnEETMCk3VACAARMwKQSgAIAs-uMMiwCOxE2LCTVOI0ssKbxa5U ts:1631739853490000]
client.query(
  q.Create(
    q.Tokens(),
    {
      instance: q.Ref(
        q.Collection('characters'),
        '181388642114077184',
      ),
    },
  )
)
.then((ret) => console.log(ret))
.catch((err) => console.error(
  'Error: [%s] %s: %s',
  err.name,
  err.message,
  err.errors()[0].description,
))
{
  ref: Ref(Tokens(), "309833836087214592"),
  ts: 1631739421850000,
  instance: Ref(Collection("characters"), "181388642114077184"),
  secret: 'fnEETMA7e2ACAARMwDsk0AYATF1jLijRmK7HYAZDxe1snLrPWJs'
}
result = client.query(
  q.create(
    q.tokens(),
    {
      "instance": q.ref(
        q.collection('characters'),
        '181388642114077184'
      )
    }
  )
)
print(result)
{'ref': Ref(id=309834127428813312, collection=Ref(id=tokens)), 'ts': 1631739699690000, 'instance': Ref(id=181388642114077184, collection=Ref(id=characters, collection=Ref(id=collections))), 'secret': 'fnEETMB_ULACAARMwH7g0AYASH2StILhxeWQQeZ709pMTxfYU-o'}
Create(
  Tokens(),
  {
    instance: Ref(Collection('characters'), '181388642114077184')
  }
)
{
  ref: Ref(Tokens(), "309833028300964352"),
  ts: 1631738651480000,
  instance: Ref(Collection("characters"), "181388642114077184"),
  secret: 'fnEETL9_Z5ACAARMv36xQAYAsGq8dFWhaBsypurs5u8qAN6Zfm8'
}
Query metrics:
  •    bytesIn:  121

  •   bytesOut:  313

  • computeOps:    1

  •    readOps:    0

  •   writeOps:    1

  •  readBytes:    0

  • writeBytes:  414

  •  queryTime: 41ms

  •    retries:    0

The token’s secret is only ever shown once, in the response from the Login function. If you lose the secret, delete the token and create a new one.

Is this article helpful? 

Tell Fauna how the article can be improved:
Visit Fauna's forums or email docs@fauna.com

Thank you for your feedback!