@micha.bigler/ui-core-micha 2.3.1 → 2.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -3,21 +3,20 @@ import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-run
|
|
|
3
3
|
//
|
|
4
4
|
// S13: Completes a pending registration. Reads the signed pending-token from
|
|
5
5
|
// the URL (`?token=...`), asks the user for a password, and POSTs to
|
|
6
|
-
// `register_confirm`. On success, the
|
|
7
|
-
//
|
|
8
|
-
|
|
6
|
+
// `register_confirm`. On success, the backend has set the session cookie; we
|
|
7
|
+
// trigger a full page reload to `/` so AuthProvider re-initialises and picks
|
|
8
|
+
// the user up at mount — avoids React-state races inside the SPA.
|
|
9
|
+
import React, { useMemo, useState } from 'react';
|
|
9
10
|
import { useLocation, useNavigate } from 'react-router-dom';
|
|
10
11
|
import { Alert, Box, Button, Stack, TextField, Typography, } from '@mui/material';
|
|
11
12
|
import { Helmet } from 'react-helmet';
|
|
12
13
|
import { useTranslation } from 'react-i18next';
|
|
13
14
|
import { NarrowPage } from '../layout/PageLayout';
|
|
14
|
-
import {
|
|
15
|
-
import { confirmRegistration, fetchCurrentUser } from '../auth/authApi';
|
|
15
|
+
import { confirmRegistration } from '../auth/authApi';
|
|
16
16
|
export function SignupConfirmPage() {
|
|
17
17
|
const { t } = useTranslation();
|
|
18
18
|
const location = useLocation();
|
|
19
19
|
const navigate = useNavigate();
|
|
20
|
-
const { login } = useContext(AuthContext);
|
|
21
20
|
const tokenFromUrl = useMemo(() => {
|
|
22
21
|
const query = new URLSearchParams(location.search);
|
|
23
22
|
return query.get('token') || '';
|
|
@@ -44,16 +43,11 @@ export function SignupConfirmPage() {
|
|
|
44
43
|
setSubmitting(true);
|
|
45
44
|
try {
|
|
46
45
|
await confirmRegistration({ token: tokenFromUrl, password });
|
|
47
|
-
//
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
catch (_a) {
|
|
53
|
-
// If user fetch fails, still navigate — the session cookie is set
|
|
54
|
-
// server-side and the next page-load will pick the user up.
|
|
55
|
-
}
|
|
56
|
-
navigate('/', { replace: true });
|
|
46
|
+
// Full page reload so AuthProvider re-initialises with the just-set
|
|
47
|
+
// session cookie. Avoids React-state races where the SPA's route guard
|
|
48
|
+
// could read a stale (null) user between login() and navigate('/').
|
|
49
|
+
window.location.assign('/');
|
|
50
|
+
return;
|
|
57
51
|
}
|
|
58
52
|
catch (err) {
|
|
59
53
|
setErrorKey((err === null || err === void 0 ? void 0 : err.code) || 'Auth.PENDING_TOKEN_INVALID');
|
package/package.json
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
//
|
|
3
3
|
// S13: Completes a pending registration. Reads the signed pending-token from
|
|
4
4
|
// the URL (`?token=...`), asks the user for a password, and POSTs to
|
|
5
|
-
// `register_confirm`. On success, the
|
|
6
|
-
//
|
|
7
|
-
|
|
5
|
+
// `register_confirm`. On success, the backend has set the session cookie; we
|
|
6
|
+
// trigger a full page reload to `/` so AuthProvider re-initialises and picks
|
|
7
|
+
// the user up at mount — avoids React-state races inside the SPA.
|
|
8
|
+
import React, { useMemo, useState } from 'react';
|
|
8
9
|
import { useLocation, useNavigate } from 'react-router-dom';
|
|
9
10
|
import {
|
|
10
11
|
Alert,
|
|
@@ -17,14 +18,12 @@ import {
|
|
|
17
18
|
import { Helmet } from 'react-helmet';
|
|
18
19
|
import { useTranslation } from 'react-i18next';
|
|
19
20
|
import { NarrowPage } from '../layout/PageLayout';
|
|
20
|
-
import {
|
|
21
|
-
import { confirmRegistration, fetchCurrentUser } from '../auth/authApi';
|
|
21
|
+
import { confirmRegistration } from '../auth/authApi';
|
|
22
22
|
|
|
23
23
|
export function SignupConfirmPage() {
|
|
24
24
|
const { t } = useTranslation();
|
|
25
25
|
const location = useLocation();
|
|
26
26
|
const navigate = useNavigate();
|
|
27
|
-
const { login } = useContext(AuthContext);
|
|
28
27
|
|
|
29
28
|
const tokenFromUrl = useMemo(() => {
|
|
30
29
|
const query = new URLSearchParams(location.search);
|
|
@@ -56,15 +55,11 @@ export function SignupConfirmPage() {
|
|
|
56
55
|
setSubmitting(true);
|
|
57
56
|
try {
|
|
58
57
|
await confirmRegistration({ token: tokenFromUrl, password });
|
|
59
|
-
//
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
// If user fetch fails, still navigate — the session cookie is set
|
|
65
|
-
// server-side and the next page-load will pick the user up.
|
|
66
|
-
}
|
|
67
|
-
navigate('/', { replace: true });
|
|
58
|
+
// Full page reload so AuthProvider re-initialises with the just-set
|
|
59
|
+
// session cookie. Avoids React-state races where the SPA's route guard
|
|
60
|
+
// could read a stale (null) user between login() and navigate('/').
|
|
61
|
+
window.location.assign('/');
|
|
62
|
+
return;
|
|
68
63
|
} catch (err) {
|
|
69
64
|
setErrorKey(err?.code || 'Auth.PENDING_TOKEN_INVALID');
|
|
70
65
|
} finally {
|