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 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
- <Admin
45
- authProvider={authProvider}
46
- dataProvider={dataProvider}
47
- >
48
- <Resource name="posts" {...posts} />
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 { Auth0Client } from './auth0';
68
- const dataProvider = jsonServerProvider('http://localhost:3000', httpClient(auth0));
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 [marmelab](https://marmelab.com).
107
+ This auth provider is licensed under the MIT License and sponsored by [Marmelab](https://marmelab.com).
@@ -1,4 +1,4 @@
1
- import { AuthProvider } from 'ra-core';
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
- * authProvider={authProvider}
33
- * dataProvider={dataProvider}
34
- * title="Example Admin"
35
- * >
36
- * <Resource name="posts" {...posts} />
37
- * </Admin>
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,SAAS,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,eAAO,MAAM,iBAAiB,WAClB,WAAW;uBAMI,MAAM;wBACL,MAAM;0BACJ,OAAO;MAIlC,YAqFD,CAAC"}
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"}
@@ -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 'ra-core';
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
- * authProvider={authProvider}
68
- * dataProvider={dataProvider}
69
- * title="Example Admin"
70
- * >
71
- * <Resource name="posts" {...posts} />
72
- * </Admin>
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
- return [2 /*return*/, client
109
- .logout({
110
- logoutParams: {
111
- returnTo: logoutRedirectUri || window.location.origin,
112
- },
113
- })
114
- .then(function () { return logoutRedirectUri || '/'; })];
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
- var status = _a.status;
121
- return __awaiter(this, void 0, void 0, function () {
122
- return __generator(this, function (_b) {
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
  }
@@ -1,4 +1,4 @@
1
- import { fetchUtils } from 'ra-core';
1
+ import { fetchUtils } from 'react-admin';
2
2
  /**
3
3
  * An httpClient that adds authentication headers needed by Auth0 in all requests.
4
4
  * @param auth0Client the Auth0 client.
@@ -1 +1 @@
1
- {"version":3,"file":"httpClient.d.ts","sourceRoot":"","sources":["../src/httpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC;;;;GAIG;AACH,eAAO,MAAM,UAAU,gBAAiB,GAAG,WAClC,GAAG,WACC,WAAW,OAAO,GAAG,SAAS;;;;;EAQ1C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,UACjB,MAAM,GAAG,IAAI,WACX,WAAW,OAAO,GAAG,SAAS,KACxC,OASF,CAAC"}
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 'ra-core';
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: return [4 /*yield*/, auth0Client.getTokenSilently()];
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
  }
@@ -1,4 +1,4 @@
1
- import { AuthProvider } from 'ra-core';
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
- * authProvider={authProvider}
33
- * dataProvider={dataProvider}
34
- * title="Example Admin"
35
- * >
36
- * <Resource name="posts" {...posts} />
37
- * </Admin>
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,SAAS,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,eAAO,MAAM,iBAAiB,WAClB,WAAW;uBAMI,MAAM;wBACL,MAAM;0BACJ,OAAO;MAIlC,YAqFD,CAAC"}
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"}
@@ -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 ra_core_1 = require("ra-core");
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
- * authProvider={authProvider}
71
- * dataProvider={dataProvider}
72
- * title="Example Admin"
73
- * >
74
- * <Resource name="posts" {...posts} />
75
- * </Admin>
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
- return [2 /*return*/, client
112
- .logout({
113
- logoutParams: {
114
- returnTo: logoutRedirectUri || window.location.origin,
115
- },
116
- })
117
- .then(function () { return logoutRedirectUri || '/'; })];
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
- var status = _a.status;
124
- return __awaiter(this, void 0, void 0, function () {
125
- return __generator(this, function (_b) {
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(ra_core_1.PreviousLocationStorageKey, window.location.href);
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"),
@@ -1,4 +1,4 @@
1
- import { fetchUtils } from 'ra-core';
1
+ import { fetchUtils } from 'react-admin';
2
2
  /**
3
3
  * An httpClient that adds authentication headers needed by Auth0 in all requests.
4
4
  * @param auth0Client the Auth0 client.
@@ -1 +1 @@
1
- {"version":3,"file":"httpClient.d.ts","sourceRoot":"","sources":["../src/httpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC;;;;GAIG;AACH,eAAO,MAAM,UAAU,gBAAiB,GAAG,WAClC,GAAG,WACC,WAAW,OAAO,GAAG,SAAS;;;;;EAQ1C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,UACjB,MAAM,GAAG,IAAI,WACX,WAAW,OAAO,GAAG,SAAS,KACxC,OASF,CAAC"}
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 ra_core_1 = require("ra-core");
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: return [4 /*yield*/, auth0Client.getTokenSilently()];
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*/, ra_core_1.fetchUtils.fetchJson(url, __assign(__assign({}, options), { headers: requestHeaders }))];
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": "1.1.0",
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
- "ra-core": "^4.10.0",
20
- "react": "^16.9.0 || ^17.0.0 || ^18.0.0",
21
- "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0"
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.2.0",
36
- "react-dom": "^18.2.0",
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": "^4.8.4"
39
+ "typescript": "^5.5.4"
40
40
  },
41
41
  "jest": {
42
42
  "preset": "ts-jest",
@@ -1,4 +1,4 @@
1
- import { AuthProvider, PreviousLocationStorageKey } from 'ra-core';
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
- * authProvider={authProvider}
34
- * dataProvider={dataProvider}
35
- * title="Example Admin"
36
- * >
37
- * <Resource name="posts" {...posts} />
38
- * </Admin>
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
- return client
79
- .logout({
80
- logoutParams: {
81
- returnTo: logoutRedirectUri || window.location.origin,
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 'ra-core';
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
- const token = await auth0Client.getTokenSilently();
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,