Skip to content

Commit cd48f50

Browse files
Fix session not persisted after login on page reload (#133)
* prefer session cookie and keep login state * format * cleanup * add missing proxies * Revert "add missing proxies" This reverts commit cda19b1. * Revert "cleanup" This reverts commit 52c2222. * Revert "prefer session cookie and keep login state" This reverts commit aeaf45b. * simplify changes * acess `siteURL` via nuxt.options instead of `useRuntimeConfig`
1 parent 78d36dd commit cd48f50

File tree

7 files changed

+38
-48
lines changed

7 files changed

+38
-48
lines changed

.directus/docker-compose.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ services:
4747

4848
# These is helpful for local developement but should probably be removed in production
4949
CORS_ENABLED: 'true'
50-
REFRESH_TOKEN_COOKIE_DOMAIN: 'localhost'
5150
EXTENSIONS_AUTO_RELOAD: 'true'
5251

5352
WEBSOCKETS_ENABLED: 'true'

.env.example

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
DIRECTUS_URL="https://your-instance.directus.app"
55
DIRECTUS_SERVER_TOKEN="your_directus_server_token_for_server_only_routes"
6-
SITE_URL="http://localhost:3000"
6+
NUXT_PUBLIC_SITE_URL="http://localhost:3000"
77

88
# Stripe Setup (If you want to allow payments within the portal)
99
STRIPE_SECRET_KEY=sk_test_xxxxxxxxxxxxxxx

modules/directus/index.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
1-
import { fileURLToPath } from 'url';
1+
import { createDirectus, readItems, readSingleton, rest } from '@directus/sdk';
22
import {
3-
defineNuxtModule,
3+
addImports,
4+
addImportsDir,
45
addPlugin,
56
createResolver,
6-
addImportsDir,
7-
addImports,
7+
defineNuxtModule,
88
extendRouteRules,
99
useLogger,
1010
} from '@nuxt/kit';
1111
import { defu } from 'defu';
12-
import { createDirectus, rest, readItems, readSingleton } from '@directus/sdk';
12+
import { joinURL } from 'ufo';
13+
import { fileURLToPath } from 'url';
1314

14-
import type { Schema, Globals } from '../../types';
15+
import type { Globals, Schema } from '../../types';
1516

1617
const log = useLogger();
1718

@@ -157,7 +158,9 @@ export default defineNuxtModule({
157158
addImportsDir(composables);
158159

159160
// ** Build Logic **
160-
const directus = createDirectus<Schema>(moduleOptions.rest.baseUrl).with(rest());
161+
const directus = createDirectus<Schema>(joinURL(nuxt.options.runtimeConfig.public.siteUrl, '/api/proxy')).with(
162+
rest(),
163+
);
161164

162165
// Handle Redirects
163166
try {

modules/directus/runtime/plugins/auth.ts

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,10 @@
1-
import type { RestClient, AuthenticationClient } from '@directus/sdk';
2-
import type { Schema } from '~/types/schema';
3-
41
import auth from '../middleware/auth';
5-
import guest from '../middleware/guest';
62
import common from '../middleware/common';
3+
import guest from '../middleware/guest';
74

8-
import {
9-
defineNuxtPlugin,
10-
addRouteMiddleware,
11-
useRuntimeConfig,
12-
useState,
13-
useDirectusAuth,
14-
useRoute,
15-
useNuxtApp,
16-
} from '#imports';
5+
import { addRouteMiddleware, defineNuxtPlugin, useDirectusAuth, useRuntimeConfig, useState } from '#imports';
176

187
export default defineNuxtPlugin(async () => {
19-
const nuxtApp = useNuxtApp();
20-
const $directus = nuxtApp.$directus as RestClient<Schema> & AuthenticationClient<Schema>;
21-
228
try {
239
const config = useRuntimeConfig().public.directus;
2410

@@ -35,23 +21,9 @@ export default defineNuxtPlugin(async () => {
3521
const { _loggedIn } = useDirectusAuth();
3622

3723
if (initialized.value === false) {
38-
const { path } = useRoute();
39-
40-
const { fetchUser, _loggedIn } = useDirectusAuth();
41-
const token = await $directus.getToken();
42-
43-
if (token) {
44-
await fetchUser({});
45-
} else {
46-
const isCallback = path === '/auth/callback';
47-
const isLoggedIn = _loggedIn.get() === 'true';
24+
const { fetchUser } = useDirectusAuth();
4825

49-
if (isCallback || isLoggedIn) {
50-
if (token) {
51-
await fetchUser({});
52-
}
53-
}
54-
}
26+
await fetchUser({});
5527
}
5628

5729
initialized.value = true;

modules/directus/runtime/plugins/directus.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
import { createDirectus, rest, authentication } from '@directus/sdk';
1+
import { authentication, createDirectus, rest } from '@directus/sdk';
2+
import { joinURL } from 'ufo';
23
import type { Schema } from '~/types/schema';
34

4-
import { defineNuxtPlugin, useRuntimeConfig, useRoute } from '#imports';
5+
import { defineNuxtPlugin, useRoute, useRuntimeConfig } from '#imports';
56

67
export default defineNuxtPlugin((nuxtApp) => {
78
const route = useRoute();
89
const config = useRuntimeConfig();
9-
const directusURL = config.public.directus.rest.baseUrl as string;
1010

11-
const directus = createDirectus<Schema>(directusURL, { globals: { fetch: $fetch } })
12-
.with(authentication('cookie', { credentials: 'include' }))
13-
.with(rest({ credentials: 'include' }));
11+
const directus = createDirectus<Schema>(joinURL(config.public.siteUrl, '/api/proxy'), { globals: { fetch: $fetch } })
12+
.with(authentication('session'))
13+
.with(rest());
1414

1515
// ** Live Preview Bits **
1616
// Check if we are in preview mode

pages/projects.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ const metadata = computed(() => {
4747
const seo = pageData?.seo as SEO;
4848
return {
4949
title: seo?.title ?? pageData?.title ?? undefined,
50-
description: seo?.meta_description ?? pageData.headline ? stripHTML(pageData?.headline as string) : undefined,
50+
description: (seo?.meta_description ?? pageData.headline) ? stripHTML(pageData?.headline as string) : undefined,
5151
image: globals?.og_image ? fileUrl(globals?.og_image) : undefined,
5252
};
5353
});

server/api/proxy/[...].ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { joinURL } from 'ufo';
2+
3+
export default defineEventHandler(async (event) => {
4+
const config = useRuntimeConfig();
5+
6+
if (!config.public.directus.rest.baseUrl) {
7+
throw new Error('Missing `runtimeConfig.apiURL` configuration.');
8+
}
9+
10+
const target = joinURL(config.public.directus.rest.baseUrl, event.path.replace(/^\/api\/proxy\//, ''));
11+
12+
return proxyRequest(event, target, {
13+
cookieDomainRewrite: new URL(config.public.siteUrl).hostname,
14+
cookiePathRewrite: '/',
15+
});
16+
});

0 commit comments

Comments
 (0)