Use Craft CMS credentials to authenticate with a Hasura powered GraphQL API
MIT License
Use your Craft CMS credentials to authenticate with a GraphQL API powered by Hasura.io
This plugin requires Craft CMS 3.5.0 or later.
To install the plugin, follow these instructions.
Open your terminal and go to your Craft project:
cd /path/to/project
Then tell Composer to load the plugin:
composer require jasonmccallister/hasura
In the Control Panel, go to Settings → Plugins and click the “Install” button for Hasura.
Hasura.io is an open-source tool that makes building APIs with real-time GraphQL APIs without writing any code. Hasura lets you connect to a new, or existing, PostgreSQL database and automatically build a GraphQL schema with real-time subscriptions; all with out writing any code!
This allows you to build GraphQL APIs at scale, with no code, using only a database and Docker image!
Watch this video as the Hasura team takes a complex applications database (in the example it uses the Gitlab database) and drops it into GraphQL in under 4 minutes
Out of the box, Hasura comes with:
However, Hasura can be configured to accept JWTs that are signed in a specific format. This is where the Hasura plugin helps. This plugin allows you to use your Craft CMS users and groups to generate the JWT to send to your Hasura API.
After installation, you need to set a few items in the plugins settings:
Users will authenticate with their username (or email if Craft is configured for email) and password to
https://yourdomain.com/hasura/auth
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIwNGZjNDM5Mi0wMmNlLTQ3MTgtYmQ5My03ODhjMWI1ZTU1ZjQiLCJhZG1pbiI6dHJ1ZSwiaWF0IjoxNTUzMDc5MjY5LCJleHAiOjE1NTMwODI4NjksImh0dHBzOlwvXC9oYXN1cmEuaW9cL2p3dFwvY2xhaW1zIjp7IngtaGFzdXJhLWFsbG93ZWQtcm9sZXMiOlsidXNlciIsImFkbWluIl0sIngtaGFzdXJhLWRlZmF1bHQtcm9sZSI6ImFkbWluIiwieC1oYXN1cmEtdXNlci1pZCI6IjA0ZmM0MzkyLTAyY2UtNDcxOC1iZDkzLTc4OGMxYjVlNTVmNCJ9fQ.WEAFZYon5arnCTN9ecAEiG4dKl-jkyk3em8EpJ9N0Vs"
}
{
"sub": "04fc4392-02ce-4718-bd93-788c1b5e55f4",
"admin": true,
"iat": 1553079269,
"exp": 1553082869,
"https://hasura.io/jwt/claims": {
"x-hasura-allowed-roles": ["user", "admin"],
"x-hasura-default-role": "admin",
"x-hasura-user-id": "04fc4392-02ce-4718-bd93-788c1b5e55f4"
}
}
Hasura allows you to tie events to table actions like insert, update, and delete. These are known as Event Triggers. This plugin allows you to receive those event triggers by configuring Hasura to send to your Craft CMS.
https://yourdomain.com/hasura/webhook
You can configure the header that Hasura will send in the plugin settings as well as a key. When the event trigger payload is received, the plugin will fire the hasuraEventTrigger
event and allow you to listen for the event and take action.
The event contains the following:
todos
)send_updated_todo_to_craft
)Brought to you by Jason McCallister
You can add custom claims (for example the users name or a custom field) to the JWT token via the new Custom Claims field in the Plugin settings.
You can add any additional information as well as user specific details as he field accepts the user
variable. In Hasura you are then able to write rules based on the x-hasura-custom-claim
object.
{{user.fullName}}
{
"sub": "04fc4392-02ce-4718-bd93-788c1b5e55f4",
"admin": true,
"iat": 1553079269,
"exp": 1553082869,
"https://hasura.io/jwt/claims": {
"x-hasura-allowed-roles": ["user", "admin"],
"x-hasura-default-role": "admin",
"x-hasura-user-id": "04fc4392-02ce-4718-bd93-788c1b5e55f4",
"x-hasura-custom-claim": "John Doe"
}
}
As Hasura only accepts custom claims to be strings we need to unwrap arrays and add them as single claims. The plugin does this for you but only on the first level. Recursive mapping will be added later. More infos can be found here: https://github.com/hasura/graphql-engine/issues/1902
{% set customCategory = user.customCategory.one() %}
{% if customCategory %}
{% set jsonObject = { "user-name": user.fullName, "category-uid": customCategory, "category-title": customCategory, "category-slug": customCategory } %}
{{ jsonObject | json_encode() }}
{% endif %}
{
"sub": "04fc4392-02ce-4718-bd93-788c1b5e55f4",
"admin": true,
"iat": 1553079269,
"exp": 1553082869,
"https://hasura.io/jwt/claims": {
"x-hasura-allowed-roles": ["user", "admin"],
"x-hasura-default-role": "admin",
"x-hasura-user-id": "04fc4392-02ce-4718-bd93-788c1b5e55f4",
"x-hasura-custom-user-name": "John Doe",
"x-hasura-custom-category-uid": "071cd618-e675-4bcc-b362-0311b43333c9",
"x-hasura-custom-category-title": "Category Name",
"x-hasura-custom-category-slug": "category-name"
}
}