ra-auth-auth0 1.1.0 → 2.0.0
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.
- package/Readme.md +18 -11
- package/esm/authProvider.d.ts +10 -7
- package/esm/authProvider.d.ts.map +1 -1
- package/esm/authProvider.js +23 -17
- package/esm/httpClient.d.ts +1 -1
- package/esm/httpClient.d.ts.map +1 -1
- package/esm/httpClient.js +13 -3
- package/lib/authProvider.d.ts +10 -7
- package/lib/authProvider.d.ts.map +1 -1
- package/lib/authProvider.js +24 -18
- package/lib/httpClient.d.ts +1 -1
- package/lib/httpClient.d.ts.map +1 -1
- package/lib/httpClient.js +14 -4
- package/package.json +7 -7
- package/src/authProvider.ts +16 -14
- package/src/httpClient.ts +7 -2
package/Readme.md
CHANGED
|
@@ -20,6 +20,7 @@ npm install --save ra-auth-auth0
|
|
|
20
20
|
// in src/App.tsx
|
|
21
21
|
import React, { useEffect, useRef, useState } from 'react';
|
|
22
22
|
import { Admin, Resource } from 'react-admin';
|
|
23
|
+
import { BrowserRouter } from 'react-router-dom';
|
|
23
24
|
import { Auth0AuthProvider } from 'ra-auth-auth0';
|
|
24
25
|
import { Auth0Client } from '@auth0/auth0-spa-js';
|
|
25
26
|
import dataProvider from './dataProvider';
|
|
@@ -41,17 +42,18 @@ const authProvider = Auth0AuthProvider(auth0, {
|
|
|
41
42
|
|
|
42
43
|
const App = () => {
|
|
43
44
|
return (
|
|
44
|
-
<
|
|
45
|
-
authProvider={authProvider}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
</Admin>
|
|
45
|
+
<BrowserRouter>
|
|
46
|
+
<Admin authProvider={authProvider} dataProvider={dataProvider}>
|
|
47
|
+
<Resource name="posts" {...posts} />
|
|
48
|
+
</Admin>
|
|
49
|
+
</BrowserRouter>
|
|
50
50
|
);
|
|
51
51
|
};
|
|
52
52
|
export default App;
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
+
**Note:** You need to wrap your app in a [`BrowserRouter`](https://reactrouter.com/en/6/router-components/browser-router) component from `react-router-dom` for the `Auth0AuthProvider` to work.
|
|
56
|
+
|
|
55
57
|
## `Auth0AuthProvider` Parameters
|
|
56
58
|
|
|
57
59
|
- `loginRedirectUri` - _optional_ - URI used to override the redirect URI after successful login. Defaults to react-admin `/auth-callback` route.
|
|
@@ -64,8 +66,13 @@ If you want to pass the Auth0 authentication token to your backend, you can use
|
|
|
64
66
|
|
|
65
67
|
```js
|
|
66
68
|
import jsonServerProvider from 'ra-data-json-server';
|
|
67
|
-
import {
|
|
68
|
-
|
|
69
|
+
import { httpClient } from 'ra-auth-auth0';
|
|
70
|
+
import { auth0 } from './auth0';
|
|
71
|
+
|
|
72
|
+
const dataProvider = jsonServerProvider(
|
|
73
|
+
'http://localhost:3000',
|
|
74
|
+
httpClient(auth0)
|
|
75
|
+
);
|
|
69
76
|
```
|
|
70
77
|
|
|
71
78
|
## Handling Permissions
|
|
@@ -87,8 +94,8 @@ const authProvider = {
|
|
|
87
94
|
|
|
88
95
|
const claims = await client.getIdTokenClaims();
|
|
89
96
|
return claims['https://my-app.example.com/roles'];
|
|
90
|
-
}
|
|
91
|
-
}
|
|
97
|
+
},
|
|
98
|
+
};
|
|
92
99
|
```
|
|
93
100
|
|
|
94
101
|
## Demo
|
|
@@ -97,4 +104,4 @@ You can find a working demo, along with the source code, in this project's repos
|
|
|
97
104
|
|
|
98
105
|
## License
|
|
99
106
|
|
|
100
|
-
This auth provider is licensed under the MIT License and sponsored by [
|
|
107
|
+
This auth provider is licensed under the MIT License and sponsored by [Marmelab](https://marmelab.com).
|
package/esm/authProvider.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AuthProvider } from '
|
|
1
|
+
import { AuthProvider } from 'react-admin';
|
|
2
2
|
import { Auth0Client } from '@auth0/auth0-spa-js';
|
|
3
3
|
/**
|
|
4
4
|
* An authProvider which handles authentication via the Auth0 instance.
|
|
@@ -7,6 +7,7 @@ import { Auth0Client } from '@auth0/auth0-spa-js';
|
|
|
7
7
|
* ```tsx
|
|
8
8
|
* import React from 'react';
|
|
9
9
|
* import { Admin, Resource } from 'react-admin';
|
|
10
|
+
* import { BrowserRouter } from 'react-router-dom';
|
|
10
11
|
* import { Auth0AuthProvider } from 'ra-auth-auth0';
|
|
11
12
|
* import { Auth0Client } from '@auth0/auth0-spa-js';
|
|
12
13
|
* import dataProvider from './dataProvider';
|
|
@@ -28,13 +29,15 @@ import { Auth0Client } from '@auth0/auth0-spa-js';
|
|
|
28
29
|
*
|
|
29
30
|
* const App = () => {
|
|
30
31
|
* return (
|
|
32
|
+
* <BrowserRouter>
|
|
31
33
|
* <Admin
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
34
|
+
* authProvider={authProvider}
|
|
35
|
+
* dataProvider={dataProvider}
|
|
36
|
+
* title="Example Admin"
|
|
37
|
+
* >
|
|
38
|
+
* <Resource name="posts" {...posts} />
|
|
39
|
+
* </Admin>
|
|
40
|
+
* <BrowserRouter>
|
|
38
41
|
* );
|
|
39
42
|
* };
|
|
40
43
|
* export default App;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authProvider.d.ts","sourceRoot":"","sources":["../src/authProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA8B,MAAM,
|
|
1
|
+
{"version":3,"file":"authProvider.d.ts","sourceRoot":"","sources":["../src/authProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA8B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,eAAO,MAAM,iBAAiB,WAClB,WAAW,kEAKhB;IACC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACjC,KAGF,YAoFD,CAAC"}
|
package/esm/authProvider.js
CHANGED
|
@@ -34,7 +34,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
34
34
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
35
|
}
|
|
36
36
|
};
|
|
37
|
-
import { PreviousLocationStorageKey } from '
|
|
37
|
+
import { PreviousLocationStorageKey } from 'react-admin';
|
|
38
38
|
/**
|
|
39
39
|
* An authProvider which handles authentication via the Auth0 instance.
|
|
40
40
|
*
|
|
@@ -42,6 +42,7 @@ import { PreviousLocationStorageKey } from 'ra-core';
|
|
|
42
42
|
* ```tsx
|
|
43
43
|
* import React from 'react';
|
|
44
44
|
* import { Admin, Resource } from 'react-admin';
|
|
45
|
+
* import { BrowserRouter } from 'react-router-dom';
|
|
45
46
|
* import { Auth0AuthProvider } from 'ra-auth-auth0';
|
|
46
47
|
* import { Auth0Client } from '@auth0/auth0-spa-js';
|
|
47
48
|
* import dataProvider from './dataProvider';
|
|
@@ -63,13 +64,15 @@ import { PreviousLocationStorageKey } from 'ra-core';
|
|
|
63
64
|
*
|
|
64
65
|
* const App = () => {
|
|
65
66
|
* return (
|
|
67
|
+
* <BrowserRouter>
|
|
66
68
|
* <Admin
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
69
|
+
* authProvider={authProvider}
|
|
70
|
+
* dataProvider={dataProvider}
|
|
71
|
+
* title="Example Admin"
|
|
72
|
+
* >
|
|
73
|
+
* <Resource name="posts" {...posts} />
|
|
74
|
+
* </Admin>
|
|
75
|
+
* <BrowserRouter>
|
|
73
76
|
* );
|
|
74
77
|
* };
|
|
75
78
|
* export default App;
|
|
@@ -105,21 +108,24 @@ export var Auth0AuthProvider = function (client, _a) {
|
|
|
105
108
|
logout: function () {
|
|
106
109
|
return __awaiter(this, void 0, void 0, function () {
|
|
107
110
|
return __generator(this, function (_a) {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
111
|
+
switch (_a.label) {
|
|
112
|
+
case 0: return [4 /*yield*/, client.logout({
|
|
113
|
+
logoutParams: {
|
|
114
|
+
returnTo: logoutRedirectUri || window.location.origin,
|
|
115
|
+
},
|
|
116
|
+
})];
|
|
117
|
+
case 1:
|
|
118
|
+
_a.sent();
|
|
119
|
+
return [2 /*return*/, false];
|
|
120
|
+
}
|
|
115
121
|
});
|
|
116
122
|
});
|
|
117
123
|
},
|
|
118
124
|
// called when the API returns an error
|
|
119
125
|
checkError: function (_a) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
return __generator(this, function (
|
|
126
|
+
return __awaiter(this, arguments, void 0, function (_b) {
|
|
127
|
+
var status = _b.status;
|
|
128
|
+
return __generator(this, function (_c) {
|
|
123
129
|
if (status === 401 || status === 403) {
|
|
124
130
|
throw new Error('Unauthorized');
|
|
125
131
|
}
|
package/esm/httpClient.d.ts
CHANGED
package/esm/httpClient.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpClient.d.ts","sourceRoot":"","sources":["../src/httpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"httpClient.d.ts","sourceRoot":"","sources":["../src/httpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;GAIG;AACH,eAAO,MAAM,UAAU,gBAAiB,GAAG,WAClC,GAAG,WACC,UAAU,CAAC,OAAO,GAAG,SAAS;;;;;EAa1C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,UACjB,MAAM,GAAG,IAAI,WACX,UAAU,CAAC,OAAO,GAAG,SAAS,KACxC,OASF,CAAC"}
|
package/esm/httpClient.js
CHANGED
|
@@ -45,19 +45,29 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
45
45
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
|
-
import { fetchUtils } from '
|
|
48
|
+
import { fetchUtils } from 'react-admin';
|
|
49
49
|
/**
|
|
50
50
|
* An httpClient that adds authentication headers needed by Auth0 in all requests.
|
|
51
51
|
* @param auth0Client the Auth0 client.
|
|
52
52
|
* @returns a function with the same definition as `httpClient` that adds an `Authorization` header containing the Auth0 token.
|
|
53
53
|
*/
|
|
54
54
|
export var httpClient = function (auth0Client) { return function (url, options) { return __awaiter(void 0, void 0, void 0, function () {
|
|
55
|
-
var token, requestHeaders;
|
|
55
|
+
var token, error_1, requestHeaders;
|
|
56
56
|
return __generator(this, function (_a) {
|
|
57
57
|
switch (_a.label) {
|
|
58
|
-
case 0:
|
|
58
|
+
case 0:
|
|
59
|
+
token = null;
|
|
60
|
+
_a.label = 1;
|
|
59
61
|
case 1:
|
|
62
|
+
_a.trys.push([1, 3, , 4]);
|
|
63
|
+
return [4 /*yield*/, auth0Client.getTokenSilently()];
|
|
64
|
+
case 2:
|
|
60
65
|
token = _a.sent();
|
|
66
|
+
return [3 /*break*/, 4];
|
|
67
|
+
case 3:
|
|
68
|
+
error_1 = _a.sent();
|
|
69
|
+
return [3 /*break*/, 4];
|
|
70
|
+
case 4:
|
|
61
71
|
requestHeaders = getAuth0Headers(token, options);
|
|
62
72
|
return [2 /*return*/, fetchUtils.fetchJson(url, __assign(__assign({}, options), { headers: requestHeaders }))];
|
|
63
73
|
}
|
package/lib/authProvider.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AuthProvider } from '
|
|
1
|
+
import { AuthProvider } from 'react-admin';
|
|
2
2
|
import { Auth0Client } from '@auth0/auth0-spa-js';
|
|
3
3
|
/**
|
|
4
4
|
* An authProvider which handles authentication via the Auth0 instance.
|
|
@@ -7,6 +7,7 @@ import { Auth0Client } from '@auth0/auth0-spa-js';
|
|
|
7
7
|
* ```tsx
|
|
8
8
|
* import React from 'react';
|
|
9
9
|
* import { Admin, Resource } from 'react-admin';
|
|
10
|
+
* import { BrowserRouter } from 'react-router-dom';
|
|
10
11
|
* import { Auth0AuthProvider } from 'ra-auth-auth0';
|
|
11
12
|
* import { Auth0Client } from '@auth0/auth0-spa-js';
|
|
12
13
|
* import dataProvider from './dataProvider';
|
|
@@ -28,13 +29,15 @@ import { Auth0Client } from '@auth0/auth0-spa-js';
|
|
|
28
29
|
*
|
|
29
30
|
* const App = () => {
|
|
30
31
|
* return (
|
|
32
|
+
* <BrowserRouter>
|
|
31
33
|
* <Admin
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
34
|
+
* authProvider={authProvider}
|
|
35
|
+
* dataProvider={dataProvider}
|
|
36
|
+
* title="Example Admin"
|
|
37
|
+
* >
|
|
38
|
+
* <Resource name="posts" {...posts} />
|
|
39
|
+
* </Admin>
|
|
40
|
+
* <BrowserRouter>
|
|
38
41
|
* );
|
|
39
42
|
* };
|
|
40
43
|
* export default App;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authProvider.d.ts","sourceRoot":"","sources":["../src/authProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA8B,MAAM,
|
|
1
|
+
{"version":3,"file":"authProvider.d.ts","sourceRoot":"","sources":["../src/authProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA8B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,eAAO,MAAM,iBAAiB,WAClB,WAAW,kEAKhB;IACC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACjC,KAGF,YAoFD,CAAC"}
|
package/lib/authProvider.js
CHANGED
|
@@ -37,7 +37,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.Auth0AuthProvider = void 0;
|
|
40
|
-
var
|
|
40
|
+
var react_admin_1 = require("react-admin");
|
|
41
41
|
/**
|
|
42
42
|
* An authProvider which handles authentication via the Auth0 instance.
|
|
43
43
|
*
|
|
@@ -45,6 +45,7 @@ var ra_core_1 = require("ra-core");
|
|
|
45
45
|
* ```tsx
|
|
46
46
|
* import React from 'react';
|
|
47
47
|
* import { Admin, Resource } from 'react-admin';
|
|
48
|
+
* import { BrowserRouter } from 'react-router-dom';
|
|
48
49
|
* import { Auth0AuthProvider } from 'ra-auth-auth0';
|
|
49
50
|
* import { Auth0Client } from '@auth0/auth0-spa-js';
|
|
50
51
|
* import dataProvider from './dataProvider';
|
|
@@ -66,13 +67,15 @@ var ra_core_1 = require("ra-core");
|
|
|
66
67
|
*
|
|
67
68
|
* const App = () => {
|
|
68
69
|
* return (
|
|
70
|
+
* <BrowserRouter>
|
|
69
71
|
* <Admin
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
72
|
+
* authProvider={authProvider}
|
|
73
|
+
* dataProvider={dataProvider}
|
|
74
|
+
* title="Example Admin"
|
|
75
|
+
* >
|
|
76
|
+
* <Resource name="posts" {...posts} />
|
|
77
|
+
* </Admin>
|
|
78
|
+
* <BrowserRouter>
|
|
76
79
|
* );
|
|
77
80
|
* };
|
|
78
81
|
* export default App;
|
|
@@ -108,21 +111,24 @@ var Auth0AuthProvider = function (client, _a) {
|
|
|
108
111
|
logout: function () {
|
|
109
112
|
return __awaiter(this, void 0, void 0, function () {
|
|
110
113
|
return __generator(this, function (_a) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
114
|
+
switch (_a.label) {
|
|
115
|
+
case 0: return [4 /*yield*/, client.logout({
|
|
116
|
+
logoutParams: {
|
|
117
|
+
returnTo: logoutRedirectUri || window.location.origin,
|
|
118
|
+
},
|
|
119
|
+
})];
|
|
120
|
+
case 1:
|
|
121
|
+
_a.sent();
|
|
122
|
+
return [2 /*return*/, false];
|
|
123
|
+
}
|
|
118
124
|
});
|
|
119
125
|
});
|
|
120
126
|
},
|
|
121
127
|
// called when the API returns an error
|
|
122
128
|
checkError: function (_a) {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
return __generator(this, function (
|
|
129
|
+
return __awaiter(this, arguments, void 0, function (_b) {
|
|
130
|
+
var status = _b.status;
|
|
131
|
+
return __generator(this, function (_c) {
|
|
126
132
|
if (status === 401 || status === 403) {
|
|
127
133
|
throw new Error('Unauthorized');
|
|
128
134
|
}
|
|
@@ -143,7 +149,7 @@ var Auth0AuthProvider = function (client, _a) {
|
|
|
143
149
|
return [2 /*return*/];
|
|
144
150
|
}
|
|
145
151
|
if (redirectOnCheckAuth) {
|
|
146
|
-
localStorage.setItem(
|
|
152
|
+
localStorage.setItem(react_admin_1.PreviousLocationStorageKey, window.location.href);
|
|
147
153
|
return [2 /*return*/, client.loginWithRedirect({
|
|
148
154
|
authorizationParams: {
|
|
149
155
|
redirect_uri: loginRedirectUri !== null && loginRedirectUri !== void 0 ? loginRedirectUri : "".concat(window.location.origin, "/auth-callback"),
|
package/lib/httpClient.d.ts
CHANGED
package/lib/httpClient.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpClient.d.ts","sourceRoot":"","sources":["../src/httpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"httpClient.d.ts","sourceRoot":"","sources":["../src/httpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;GAIG;AACH,eAAO,MAAM,UAAU,gBAAiB,GAAG,WAClC,GAAG,WACC,UAAU,CAAC,OAAO,GAAG,SAAS;;;;;EAa1C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,UACjB,MAAM,GAAG,IAAI,WACX,UAAU,CAAC,OAAO,GAAG,SAAS,KACxC,OASF,CAAC"}
|
package/lib/httpClient.js
CHANGED
|
@@ -48,21 +48,31 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
48
48
|
};
|
|
49
49
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
50
|
exports.getAuth0Headers = exports.httpClient = void 0;
|
|
51
|
-
var
|
|
51
|
+
var react_admin_1 = require("react-admin");
|
|
52
52
|
/**
|
|
53
53
|
* An httpClient that adds authentication headers needed by Auth0 in all requests.
|
|
54
54
|
* @param auth0Client the Auth0 client.
|
|
55
55
|
* @returns a function with the same definition as `httpClient` that adds an `Authorization` header containing the Auth0 token.
|
|
56
56
|
*/
|
|
57
57
|
var httpClient = function (auth0Client) { return function (url, options) { return __awaiter(void 0, void 0, void 0, function () {
|
|
58
|
-
var token, requestHeaders;
|
|
58
|
+
var token, error_1, requestHeaders;
|
|
59
59
|
return __generator(this, function (_a) {
|
|
60
60
|
switch (_a.label) {
|
|
61
|
-
case 0:
|
|
61
|
+
case 0:
|
|
62
|
+
token = null;
|
|
63
|
+
_a.label = 1;
|
|
62
64
|
case 1:
|
|
65
|
+
_a.trys.push([1, 3, , 4]);
|
|
66
|
+
return [4 /*yield*/, auth0Client.getTokenSilently()];
|
|
67
|
+
case 2:
|
|
63
68
|
token = _a.sent();
|
|
69
|
+
return [3 /*break*/, 4];
|
|
70
|
+
case 3:
|
|
71
|
+
error_1 = _a.sent();
|
|
72
|
+
return [3 /*break*/, 4];
|
|
73
|
+
case 4:
|
|
64
74
|
requestHeaders = (0, exports.getAuth0Headers)(token, options);
|
|
65
|
-
return [2 /*return*/,
|
|
75
|
+
return [2 /*return*/, react_admin_1.fetchUtils.fetchJson(url, __assign(__assign({}, options), { headers: requestHeaders }))];
|
|
66
76
|
}
|
|
67
77
|
});
|
|
68
78
|
}); }; };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ra-auth-auth0",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"repository": "git@github.com:marmelab/ra-auth-auth0.git",
|
|
5
5
|
"author": "Anthony Rimet <anthony@marmelab.com> (https://marmelab.com/)",
|
|
6
6
|
"license": "MIT",
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
"sideEffects": false,
|
|
17
17
|
"peerDependencies": {
|
|
18
18
|
"@auth0/auth0-spa-js": "^2.0.0",
|
|
19
|
-
"
|
|
20
|
-
"react": "^
|
|
21
|
-
"react-dom": "^
|
|
19
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
20
|
+
"react-admin": "^5.1.1",
|
|
21
|
+
"react-dom": "^18.0.0 || ^19.0.0"
|
|
22
22
|
},
|
|
23
23
|
"scripts": {
|
|
24
24
|
"build": "yarn run build-cjs && yarn run build-esm",
|
|
@@ -32,11 +32,11 @@
|
|
|
32
32
|
"@types/jest": "^29.1.0",
|
|
33
33
|
"jest": "^29.1.1",
|
|
34
34
|
"jest-environment-jsdom": "^29.1.1",
|
|
35
|
-
"react": "^18.
|
|
36
|
-
"react-dom": "^18.
|
|
35
|
+
"react": "^18.3.1",
|
|
36
|
+
"react-dom": "^18.3.1",
|
|
37
37
|
"rimraf": "^3.0.2",
|
|
38
38
|
"ts-jest": "^29.0.3",
|
|
39
|
-
"typescript": "^
|
|
39
|
+
"typescript": "^5.5.4"
|
|
40
40
|
},
|
|
41
41
|
"jest": {
|
|
42
42
|
"preset": "ts-jest",
|
package/src/authProvider.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AuthProvider, PreviousLocationStorageKey } from '
|
|
1
|
+
import { AuthProvider, PreviousLocationStorageKey } from 'react-admin';
|
|
2
2
|
import { Auth0Client } from '@auth0/auth0-spa-js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -8,6 +8,7 @@ import { Auth0Client } from '@auth0/auth0-spa-js';
|
|
|
8
8
|
* ```tsx
|
|
9
9
|
* import React from 'react';
|
|
10
10
|
* import { Admin, Resource } from 'react-admin';
|
|
11
|
+
* import { BrowserRouter } from 'react-router-dom';
|
|
11
12
|
* import { Auth0AuthProvider } from 'ra-auth-auth0';
|
|
12
13
|
* import { Auth0Client } from '@auth0/auth0-spa-js';
|
|
13
14
|
* import dataProvider from './dataProvider';
|
|
@@ -29,13 +30,15 @@ import { Auth0Client } from '@auth0/auth0-spa-js';
|
|
|
29
30
|
*
|
|
30
31
|
* const App = () => {
|
|
31
32
|
* return (
|
|
33
|
+
* <BrowserRouter>
|
|
32
34
|
* <Admin
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
35
|
+
* authProvider={authProvider}
|
|
36
|
+
* dataProvider={dataProvider}
|
|
37
|
+
* title="Example Admin"
|
|
38
|
+
* >
|
|
39
|
+
* <Resource name="posts" {...posts} />
|
|
40
|
+
* </Admin>
|
|
41
|
+
* <BrowserRouter>
|
|
39
42
|
* );
|
|
40
43
|
* };
|
|
41
44
|
* export default App;
|
|
@@ -75,13 +78,12 @@ export const Auth0AuthProvider = (
|
|
|
75
78
|
},
|
|
76
79
|
// called when the user clicks on the logout button
|
|
77
80
|
async logout() {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
.then(() => logoutRedirectUri || '/');
|
|
81
|
+
await client.logout({
|
|
82
|
+
logoutParams: {
|
|
83
|
+
returnTo: logoutRedirectUri || window.location.origin,
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
return false;
|
|
85
87
|
},
|
|
86
88
|
// called when the API returns an error
|
|
87
89
|
async checkError({ status }) {
|
package/src/httpClient.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { fetchUtils } from '
|
|
1
|
+
import { fetchUtils } from 'react-admin';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* An httpClient that adds authentication headers needed by Auth0 in all requests.
|
|
@@ -9,7 +9,12 @@ export const httpClient = (auth0Client: any) => async (
|
|
|
9
9
|
url: any,
|
|
10
10
|
options: fetchUtils.Options | undefined
|
|
11
11
|
) => {
|
|
12
|
-
|
|
12
|
+
let token: string | null = null;
|
|
13
|
+
try {
|
|
14
|
+
token = await auth0Client.getTokenSilently();
|
|
15
|
+
} catch (error) {
|
|
16
|
+
// Nothing to do, we just won't set the Authorization header
|
|
17
|
+
}
|
|
13
18
|
const requestHeaders = getAuth0Headers(token, options);
|
|
14
19
|
return fetchUtils.fetchJson(url, {
|
|
15
20
|
...options,
|