Inspired by the hasura-backend-plus
Create tables and initial state for your user management.
CREATE EXTENSION IF NOT EXISTS citext WITH SCHEMA public;
CREATETABLE "role" (
name textNOT NULLPRIMARY KEY,
created_at timestamp with time zoneNOT NULL DEFAULT now()
);
INSERT INTO"role" ("name") VALUES ('user');
CREATETABLE "organization" (
id uuid DEFAULT gen_random_uuid() NOT NULLCONSTRAINT organization_pkey PRIMARY KEY,
name textNOT NULL,
created_at timestamp WITH TIME ZONE DEFAULT now() NOT NULL,
updated_at timestamp WITH TIME ZONE DEFAULT now() NOT NULL
);
CREATETABLE "user" (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
organization_id uuid NULLCONSTRAINT user_organization_id_fkey REFERENCES"organization"ONUPDATE CASCADE ON DELETE CASCADE,
email citext NOT NULL,
password textNOT NULL,
default_role textNOT NULL DEFAULT 'user',
is_active booleanNOT NULL DEFAULT false,
secret_token uuid NOT NULL,
created_at timestamp with time zoneNOT NULL DEFAULT now(),
updated_at timestamp with time zoneNOT NULL DEFAULT now(),
CONSTRAINT user_email_organization_id_key UNIQUE (email, organization_id),
FOREIGN KEY (default_role) REFERENCES role (name)
);
CREATETABLE "user_role" (
id uuid DEFAULT gen_random_uuid() NOT NULLCONSTRAINT user_role_pkey PRIMARY KEY,
user_id uuid NOT NULLCONSTRAINT user_role_user_id_fkey REFERENCES"user"ONUPDATE CASCADE ON DELETE CASCADE,
role textNOT NULL,
created_at timestamp WITH TIME ZONE DEFAULT now() NOT NULL,
updated_at timestamp WITH TIME ZONE DEFAULT now() not null,
CONSTRAINT user_role_user_id_role_key UNIQUE (user_id, role)
);
CREATETABLE "user_session" (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
user_agent textNULL,
ip_address textNULL,
user_id uuid NOT NULL,
refresh_token textNOT NULL,
expires_at timestamp with time zoneNOT NULL,
created_at timestamp with time zoneNOT NULL DEFAULT now(),
updated_at timestamp with time zoneNOT NULL DEFAULT now(),
FOREIGN KEY (user_id) REFERENCES"user" (id)
);Go to the Hasura console. Click the "Data" menu link and then click "Track all" under both "Untracked tables or views" and "Untracked foreign-key relations"
Set your hasura environment to use this configuration:
HASURA_GRAPHQL_AUTH_HOOK=https://<your-domain-with-hasura-auth>/hook
Go to the Hasura console. Clink the "Remote Schemas" menu link and then click "Add".
Set a name to "Remote Schema name" like you prefer eg. (hasura-auth) and set the "GraphQL server URL" to use tbe url https://<your-domain-with-hasura-auth>/graphql/
In "Headers for the remote GraphQL server" select the option "Forward all headers from client". After that clink an "Add Remote Schema" button
| name | default | description |
|---|---|---|
PORT | 4000 | Express server port |
HASURA_GRAPHQL_ENDPOINT | http://graphql-engine:8080/v1alpha1/graphql | Endpoit to hasura server |
HASURA_GRAPHQL_ADMIN_SECRET | NULL | Admin secrete key of hasura console |
HASURA_GRAPHQL_CLAIMS_KEY | https://hasura.io/jwt/claims | Key hequired by hasura in JWT |
HASURA_GRAPHQL_HEADER_PREFIX | x-hasura- | Hasura header prefix |
USER_REGISTRATION_AUTO_ACTIVE | true | Auto active the user account |
REFRESH_TOKEN_EXPIRES_IN | 43200 | Life time in minutes of refresh token |
JWT_ALGORITHM | HS256 | JWT Algorithm |
JWT_PRIVATE_KEY | secretkey | JWT Secret key used to generate token |
JWT_TOKEN_EXPIRES | 15 | Life time in minutes of JWT |
ALLOW_REGISTRATION_FOR | * | Allow registration by role |
ALLOW_EMPTY_ORGANIZATION | true | Allow use empty organization |
- Google Login
- Facebook Login
- Twitter Login
MIT