@morojs/moro 1.5.10 → 1.5.12
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/dist/core/middleware/built-in/auth.js +36 -42
- package/dist/core/middleware/built-in/auth.js.map +1 -1
- package/dist/core/middleware/built-in/index.d.ts +1 -0
- package/dist/core/middleware/built-in/index.js +6 -1
- package/dist/core/middleware/built-in/index.js.map +1 -1
- package/dist/core/middleware/built-in/jwt-helpers.d.ts +93 -0
- package/dist/core/middleware/built-in/jwt-helpers.js +196 -0
- package/dist/core/middleware/built-in/jwt-helpers.js.map +1 -0
- package/package.json +1 -1
- package/src/core/middleware/built-in/auth.ts +38 -46
- package/src/core/middleware/built-in/index.ts +8 -0
- package/src/core/middleware/built-in/jwt-helpers.ts +215 -0
|
@@ -223,11 +223,11 @@ const auth = (options) => ({
|
|
|
223
223
|
},
|
|
224
224
|
});
|
|
225
225
|
exports.auth = auth;
|
|
226
|
-
//
|
|
226
|
+
// Auth.js implementation with proper JWT handling
|
|
227
227
|
async function initializeAuthJS(config) {
|
|
228
228
|
return {
|
|
229
229
|
handler: async (req, res) => {
|
|
230
|
-
//
|
|
230
|
+
// Basic Auth.js request handler
|
|
231
231
|
const path = req.url.replace(config.basePath, '');
|
|
232
232
|
if (path.startsWith('/signin')) {
|
|
233
233
|
// Handle sign in
|
|
@@ -248,7 +248,7 @@ async function initializeAuthJS(config) {
|
|
|
248
248
|
return null;
|
|
249
249
|
},
|
|
250
250
|
getSession: async ({ req }) => {
|
|
251
|
-
//
|
|
251
|
+
// Basic session retrieval
|
|
252
252
|
const sessionId = req.cookies?.['next-auth.session-token'] ||
|
|
253
253
|
req.cookies?.['__Secure-next-auth.session-token'];
|
|
254
254
|
if (sessionId && req.session) {
|
|
@@ -260,64 +260,58 @@ async function initializeAuthJS(config) {
|
|
|
260
260
|
return null;
|
|
261
261
|
},
|
|
262
262
|
verifyJWT: async (token) => {
|
|
263
|
-
//
|
|
263
|
+
// Require jsonwebtoken for JWT verification
|
|
264
|
+
let jwt;
|
|
264
265
|
try {
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
//
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
if (!token || token.split('.').length !== 3) {
|
|
285
|
-
const error = new Error('Invalid token format');
|
|
286
|
-
error.name = 'JsonWebTokenError';
|
|
266
|
+
jwt = require('jsonwebtoken');
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
throw new Error('JWT verification requires the "jsonwebtoken" package. ' +
|
|
270
|
+
'Please install it with: npm install jsonwebtoken @types/jsonwebtoken');
|
|
271
|
+
}
|
|
272
|
+
const secret = process.env.JWT_SECRET || config.jwt?.secret || config.secret;
|
|
273
|
+
if (!secret) {
|
|
274
|
+
throw new Error('JWT verification requires a secret. ' +
|
|
275
|
+
'Please set JWT_SECRET environment variable, or provide jwt.secret or secret in auth config.');
|
|
276
|
+
}
|
|
277
|
+
try {
|
|
278
|
+
const decoded = jwt.verify(token, secret);
|
|
279
|
+
return decoded;
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
// Handle specific JWT errors gracefully
|
|
283
|
+
if (error.name === 'TokenExpiredError') {
|
|
284
|
+
// Token expired - handled gracefully by auth middleware
|
|
287
285
|
throw error;
|
|
288
286
|
}
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
if (payload.exp && payload.exp < Date.now() / 1000) {
|
|
292
|
-
const error = new Error('jwt expired');
|
|
293
|
-
error.name = 'TokenExpiredError';
|
|
294
|
-
error.expiredAt = new Date(payload.exp * 1000);
|
|
287
|
+
else if (error.name === 'JsonWebTokenError') {
|
|
288
|
+
// Invalid token format
|
|
295
289
|
throw error;
|
|
296
290
|
}
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
catch (error) {
|
|
300
|
-
// Re-throw JWT errors for proper handling by auth middleware
|
|
301
|
-
if (error instanceof Error) {
|
|
291
|
+
else if (error.name === 'NotBeforeError') {
|
|
292
|
+
// Token not active yet
|
|
302
293
|
throw error;
|
|
303
294
|
}
|
|
304
|
-
|
|
295
|
+
else {
|
|
296
|
+
// Other JWT errors
|
|
297
|
+
throw new Error(`JWT verification failed: ${error.message}`);
|
|
298
|
+
}
|
|
305
299
|
}
|
|
306
300
|
},
|
|
307
301
|
signIn: async (provider, options) => {
|
|
308
|
-
//
|
|
302
|
+
// Basic sign in redirect
|
|
309
303
|
return { url: `${config.basePath}/signin${provider ? `/${provider}` : ''}` };
|
|
310
304
|
},
|
|
311
305
|
signOut: async (options) => {
|
|
312
|
-
//
|
|
306
|
+
// Basic sign out redirect
|
|
313
307
|
return { url: `${config.basePath}/signout` };
|
|
314
308
|
},
|
|
315
309
|
updateSession: async (session) => {
|
|
316
|
-
//
|
|
310
|
+
// Basic session update
|
|
317
311
|
return session;
|
|
318
312
|
},
|
|
319
313
|
getCsrfToken: async () => {
|
|
320
|
-
//
|
|
314
|
+
// Basic CSRF token generation
|
|
321
315
|
const crypto = require('crypto');
|
|
322
316
|
return crypto.randomBytes(32).toString('hex');
|
|
323
317
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../src/core/middleware/built-in/auth.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../src/core/middleware/built-in/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ export { session } from './session';
|
|
|
13
13
|
export { cache } from './cache';
|
|
14
14
|
export { cdn } from './cdn';
|
|
15
15
|
export { requireAuth, requireRole, requirePermission, requireAdmin, guestOnly, optionalAuth, withAuth, protectedRoute, authUtils, authResponses, sessionHelpers, } from './auth-helpers';
|
|
16
|
+
export { safeVerifyJWT, extractJWTFromHeader, createAuthErrorResponse, type JWTVerificationResult, } from './jwt-helpers';
|
|
16
17
|
export { extendedProviders, enterpriseProviders, createCustomOAuthProvider, createCustomOIDCProvider, } from './auth-providers';
|
|
17
18
|
export declare const builtInMiddleware: {
|
|
18
19
|
auth: (options: import("../../..").AuthOptions) => import("..").MiddlewareInterface;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.simpleMiddleware = exports.builtInMiddleware = exports.createCustomOIDCProvider = exports.createCustomOAuthProvider = exports.enterpriseProviders = exports.extendedProviders = exports.sessionHelpers = exports.authResponses = exports.authUtils = exports.protectedRoute = exports.withAuth = exports.optionalAuth = exports.guestOnly = exports.requireAdmin = exports.requirePermission = exports.requireRole = exports.requireAuth = exports.cdn = exports.cache = exports.session = exports.sse = exports.csp = exports.csrf = exports.cookie = exports.errorTracker = exports.performanceMonitor = exports.requestLogger = exports.validation = exports.cors = exports.rateLimit = exports.auth = void 0;
|
|
3
|
+
exports.simpleMiddleware = exports.builtInMiddleware = exports.createCustomOIDCProvider = exports.createCustomOAuthProvider = exports.enterpriseProviders = exports.extendedProviders = exports.createAuthErrorResponse = exports.extractJWTFromHeader = exports.safeVerifyJWT = exports.sessionHelpers = exports.authResponses = exports.authUtils = exports.protectedRoute = exports.withAuth = exports.optionalAuth = exports.guestOnly = exports.requireAdmin = exports.requirePermission = exports.requireRole = exports.requireAuth = exports.cdn = exports.cache = exports.session = exports.sse = exports.csp = exports.csrf = exports.cookie = exports.errorTracker = exports.performanceMonitor = exports.requestLogger = exports.validation = exports.cors = exports.rateLimit = exports.auth = void 0;
|
|
4
4
|
// Built-in Middleware Exports
|
|
5
5
|
var auth_1 = require("./auth");
|
|
6
6
|
Object.defineProperty(exports, "auth", { enumerable: true, get: function () { return auth_1.auth; } });
|
|
@@ -45,6 +45,11 @@ Object.defineProperty(exports, "protectedRoute", { enumerable: true, get: functi
|
|
|
45
45
|
Object.defineProperty(exports, "authUtils", { enumerable: true, get: function () { return auth_helpers_1.authUtils; } });
|
|
46
46
|
Object.defineProperty(exports, "authResponses", { enumerable: true, get: function () { return auth_helpers_1.authResponses; } });
|
|
47
47
|
Object.defineProperty(exports, "sessionHelpers", { enumerable: true, get: function () { return auth_helpers_1.sessionHelpers; } });
|
|
48
|
+
// JWT Utilities for Custom Middleware
|
|
49
|
+
var jwt_helpers_1 = require("./jwt-helpers");
|
|
50
|
+
Object.defineProperty(exports, "safeVerifyJWT", { enumerable: true, get: function () { return jwt_helpers_1.safeVerifyJWT; } });
|
|
51
|
+
Object.defineProperty(exports, "extractJWTFromHeader", { enumerable: true, get: function () { return jwt_helpers_1.extractJWTFromHeader; } });
|
|
52
|
+
Object.defineProperty(exports, "createAuthErrorResponse", { enumerable: true, get: function () { return jwt_helpers_1.createAuthErrorResponse; } });
|
|
48
53
|
var auth_providers_1 = require("./auth-providers");
|
|
49
54
|
Object.defineProperty(exports, "extendedProviders", { enumerable: true, get: function () { return auth_providers_1.extendedProviders; } });
|
|
50
55
|
Object.defineProperty(exports, "enterpriseProviders", { enumerable: true, get: function () { return auth_providers_1.enterpriseProviders; } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/middleware/built-in/index.ts"],"names":[],"mappings":";;;AAAA,8BAA8B;AAC9B,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AACnB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,6DAA2D;AAAlD,yHAAA,kBAAkB,OAAA;AAC3B,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AAErB,6CAA6C;AAC7C,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,6BAA4B;AAAnB,0FAAA,GAAG,OAAA;AACZ,6BAA4B;AAAnB,0FAAA,GAAG,OAAA;AACZ,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAEhB,gCAAgC;AAChC,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AACd,6BAA4B;AAAnB,0FAAA,GAAG,OAAA;AAEZ,sCAAsC;AACtC,+CAYwB;AAXtB,2GAAA,WAAW,OAAA;AACX,2GAAA,WAAW,OAAA;AACX,iHAAA,iBAAiB,OAAA;AACjB,4GAAA,YAAY,OAAA;AACZ,yGAAA,SAAS,OAAA;AACT,4GAAA,YAAY,OAAA;AACZ,wGAAA,QAAQ,OAAA;AACR,8GAAA,cAAc,OAAA;AACd,yGAAA,SAAS,OAAA;AACT,6GAAA,aAAa,OAAA;AACb,8GAAA,cAAc,OAAA;AAGhB,mDAK0B;AAJxB,mHAAA,iBAAiB,OAAA;AACjB,qHAAA,mBAAmB,OAAA;AACnB,2HAAA,yBAAyB,OAAA;AACzB,0HAAA,wBAAwB,OAAA;AAG1B,yBAAyB;AACzB,iCAA8B;AAC9B,6CAAyC;AACzC,iCAA8B;AAC9B,6CAA0C;AAC1C,qDAAiD;AACjD,+DAA2D;AAC3D,mDAA+C;AAC/C,qCAAkC;AAClC,iCAA8B;AAC9B,+BAA4B;AAC5B,+BAA4B;AAC5B,uCAAoC;AACpC,mCAAgC;AAChC,+BAA4B;AAEf,QAAA,iBAAiB,GAAG;IAC/B,IAAI,EAAJ,WAAI;IACJ,SAAS,EAAT,sBAAS;IACT,IAAI,EAAJ,WAAI;IACJ,UAAU,EAAV,uBAAU;IACV,sBAAsB;IACtB,MAAM,EAAN,eAAM;IACN,IAAI,EAAJ,WAAI;IACJ,GAAG,EAAH,SAAG;IACH,GAAG,EAAH,SAAG;IACH,OAAO,EAAP,iBAAO;IACP,gCAAgC;IAChC,KAAK,EAAL,aAAK;IACL,GAAG,EAAH,SAAG;CACJ,CAAC;AAEW,QAAA,gBAAgB,GAAG;IAC9B,aAAa,EAAb,8BAAa;IACb,kBAAkB,EAAlB,wCAAkB;IAClB,YAAY,EAAZ,4BAAY;CACb,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/middleware/built-in/index.ts"],"names":[],"mappings":";;;AAAA,8BAA8B;AAC9B,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AACnB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,6DAA2D;AAAlD,yHAAA,kBAAkB,OAAA;AAC3B,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AAErB,6CAA6C;AAC7C,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,6BAA4B;AAAnB,0FAAA,GAAG,OAAA;AACZ,6BAA4B;AAAnB,0FAAA,GAAG,OAAA;AACZ,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAEhB,gCAAgC;AAChC,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AACd,6BAA4B;AAAnB,0FAAA,GAAG,OAAA;AAEZ,sCAAsC;AACtC,+CAYwB;AAXtB,2GAAA,WAAW,OAAA;AACX,2GAAA,WAAW,OAAA;AACX,iHAAA,iBAAiB,OAAA;AACjB,4GAAA,YAAY,OAAA;AACZ,yGAAA,SAAS,OAAA;AACT,4GAAA,YAAY,OAAA;AACZ,wGAAA,QAAQ,OAAA;AACR,8GAAA,cAAc,OAAA;AACd,yGAAA,SAAS,OAAA;AACT,6GAAA,aAAa,OAAA;AACb,8GAAA,cAAc,OAAA;AAGhB,sCAAsC;AACtC,6CAKuB;AAJrB,4GAAA,aAAa,OAAA;AACb,mHAAA,oBAAoB,OAAA;AACpB,sHAAA,uBAAuB,OAAA;AAIzB,mDAK0B;AAJxB,mHAAA,iBAAiB,OAAA;AACjB,qHAAA,mBAAmB,OAAA;AACnB,2HAAA,yBAAyB,OAAA;AACzB,0HAAA,wBAAwB,OAAA;AAG1B,yBAAyB;AACzB,iCAA8B;AAC9B,6CAAyC;AACzC,iCAA8B;AAC9B,6CAA0C;AAC1C,qDAAiD;AACjD,+DAA2D;AAC3D,mDAA+C;AAC/C,qCAAkC;AAClC,iCAA8B;AAC9B,+BAA4B;AAC5B,+BAA4B;AAC5B,uCAAoC;AACpC,mCAAgC;AAChC,+BAA4B;AAEf,QAAA,iBAAiB,GAAG;IAC/B,IAAI,EAAJ,WAAI;IACJ,SAAS,EAAT,sBAAS;IACT,IAAI,EAAJ,WAAI;IACJ,UAAU,EAAV,uBAAU;IACV,sBAAsB;IACtB,MAAM,EAAN,eAAM;IACN,IAAI,EAAJ,WAAI;IACJ,GAAG,EAAH,SAAG;IACH,GAAG,EAAH,SAAG;IACH,OAAO,EAAP,iBAAO;IACP,gCAAgC;IAChC,KAAK,EAAL,aAAK;IACL,GAAG,EAAH,SAAG;CACJ,CAAC;AAEW,QAAA,gBAAgB,GAAG;IAC9B,aAAa,EAAb,8BAAa;IACb,kBAAkB,EAAlB,wCAAkB;IAClB,YAAY,EAAZ,4BAAY;CACb,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JWT Error Handling Utilities for Custom Middleware
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities to help users handle JWT errors gracefully
|
|
5
|
+
* in their custom authentication middleware.
|
|
6
|
+
*/
|
|
7
|
+
export interface JWTVerificationResult {
|
|
8
|
+
success: boolean;
|
|
9
|
+
payload?: any;
|
|
10
|
+
error?: {
|
|
11
|
+
type: 'expired' | 'invalid' | 'malformed' | 'missing_secret' | 'unknown';
|
|
12
|
+
message: string;
|
|
13
|
+
expiredAt?: Date;
|
|
14
|
+
date?: Date;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Safely verify a JWT token with proper error handling
|
|
19
|
+
*
|
|
20
|
+
* @param token - The JWT token to verify
|
|
21
|
+
* @param secret - The secret key for verification
|
|
22
|
+
* @param options - Additional JWT verification options
|
|
23
|
+
* @returns JWTVerificationResult with success status and payload or error details
|
|
24
|
+
*/
|
|
25
|
+
export declare function safeVerifyJWT(token: string, secret: string, options?: any): JWTVerificationResult;
|
|
26
|
+
/**
|
|
27
|
+
* Extract JWT token from Authorization header
|
|
28
|
+
*
|
|
29
|
+
* @param authHeader - The Authorization header value
|
|
30
|
+
* @returns The JWT token or null if not found/invalid format
|
|
31
|
+
*/
|
|
32
|
+
export declare function extractJWTFromHeader(authHeader: string | undefined): string | null;
|
|
33
|
+
/**
|
|
34
|
+
* Create a standardized auth middleware error response
|
|
35
|
+
*
|
|
36
|
+
* @param error - The JWT verification error
|
|
37
|
+
* @returns Standardized error response object
|
|
38
|
+
*/
|
|
39
|
+
export declare function createAuthErrorResponse(error: JWTVerificationResult['error']): {
|
|
40
|
+
success: boolean;
|
|
41
|
+
error: string;
|
|
42
|
+
message: string;
|
|
43
|
+
expiredAt?: undefined;
|
|
44
|
+
availableAt?: undefined;
|
|
45
|
+
} | {
|
|
46
|
+
success: boolean;
|
|
47
|
+
error: string;
|
|
48
|
+
message: string;
|
|
49
|
+
expiredAt: Date | undefined;
|
|
50
|
+
availableAt?: undefined;
|
|
51
|
+
} | {
|
|
52
|
+
success: boolean;
|
|
53
|
+
error: string;
|
|
54
|
+
message: string;
|
|
55
|
+
availableAt: Date | undefined;
|
|
56
|
+
expiredAt?: undefined;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Example usage for custom middleware:
|
|
60
|
+
*
|
|
61
|
+
* ```typescript
|
|
62
|
+
* import { safeVerifyJWT, extractJWTFromHeader, createAuthErrorResponse } from '@morojs/moro';
|
|
63
|
+
*
|
|
64
|
+
* const authMiddleware = async (req: any, res: any, next: any) => {
|
|
65
|
+
* const token = extractJWTFromHeader(req.headers.authorization);
|
|
66
|
+
*
|
|
67
|
+
* if (!token) {
|
|
68
|
+
* return res.status(401).json({
|
|
69
|
+
* success: false,
|
|
70
|
+
* error: 'Missing token',
|
|
71
|
+
* message: 'Authorization header with Bearer token is required'
|
|
72
|
+
* });
|
|
73
|
+
* }
|
|
74
|
+
*
|
|
75
|
+
* const result = safeVerifyJWT(token, process.env.JWT_SECRET!);
|
|
76
|
+
*
|
|
77
|
+
* if (!result.success) {
|
|
78
|
+
* const errorResponse = createAuthErrorResponse(result.error);
|
|
79
|
+
* return res.status(401).json(errorResponse);
|
|
80
|
+
* }
|
|
81
|
+
*
|
|
82
|
+
* // Token is valid - attach user info to request
|
|
83
|
+
* req.user = result.payload;
|
|
84
|
+
* req.auth = {
|
|
85
|
+
* user: result.payload,
|
|
86
|
+
* isAuthenticated: true,
|
|
87
|
+
* token
|
|
88
|
+
* };
|
|
89
|
+
*
|
|
90
|
+
* next();
|
|
91
|
+
* };
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* JWT Error Handling Utilities for Custom Middleware
|
|
4
|
+
*
|
|
5
|
+
* This module provides utilities to help users handle JWT errors gracefully
|
|
6
|
+
* in their custom authentication middleware.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.safeVerifyJWT = safeVerifyJWT;
|
|
10
|
+
exports.extractJWTFromHeader = extractJWTFromHeader;
|
|
11
|
+
exports.createAuthErrorResponse = createAuthErrorResponse;
|
|
12
|
+
/**
|
|
13
|
+
* Safely verify a JWT token with proper error handling
|
|
14
|
+
*
|
|
15
|
+
* @param token - The JWT token to verify
|
|
16
|
+
* @param secret - The secret key for verification
|
|
17
|
+
* @param options - Additional JWT verification options
|
|
18
|
+
* @returns JWTVerificationResult with success status and payload or error details
|
|
19
|
+
*/
|
|
20
|
+
function safeVerifyJWT(token, secret, options = {}) {
|
|
21
|
+
// Check if jsonwebtoken is available
|
|
22
|
+
let jwt;
|
|
23
|
+
try {
|
|
24
|
+
jwt = require('jsonwebtoken');
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
return {
|
|
28
|
+
success: false,
|
|
29
|
+
error: {
|
|
30
|
+
type: 'missing_secret',
|
|
31
|
+
message: 'JWT verification requires the "jsonwebtoken" package. ' +
|
|
32
|
+
'Please install it with: npm install jsonwebtoken @types/jsonwebtoken',
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
if (!secret) {
|
|
37
|
+
return {
|
|
38
|
+
success: false,
|
|
39
|
+
error: {
|
|
40
|
+
type: 'missing_secret',
|
|
41
|
+
message: 'JWT verification requires a secret. ' +
|
|
42
|
+
'Please provide a secret for token verification.',
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
const payload = jwt.verify(token, secret, options);
|
|
48
|
+
return {
|
|
49
|
+
success: true,
|
|
50
|
+
payload,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
// Handle specific JWT errors gracefully
|
|
55
|
+
if (error.name === 'TokenExpiredError') {
|
|
56
|
+
return {
|
|
57
|
+
success: false,
|
|
58
|
+
error: {
|
|
59
|
+
type: 'expired',
|
|
60
|
+
message: 'JWT token has expired',
|
|
61
|
+
expiredAt: error.expiredAt,
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
else if (error.name === 'JsonWebTokenError') {
|
|
66
|
+
return {
|
|
67
|
+
success: false,
|
|
68
|
+
error: {
|
|
69
|
+
type: 'invalid',
|
|
70
|
+
message: 'Invalid JWT token format or signature',
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
else if (error.name === 'NotBeforeError') {
|
|
75
|
+
return {
|
|
76
|
+
success: false,
|
|
77
|
+
error: {
|
|
78
|
+
type: 'malformed',
|
|
79
|
+
message: 'JWT token is not active yet',
|
|
80
|
+
date: error.date,
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
return {
|
|
86
|
+
success: false,
|
|
87
|
+
error: {
|
|
88
|
+
type: 'unknown',
|
|
89
|
+
message: `JWT verification failed: ${error.message}`,
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Extract JWT token from Authorization header
|
|
97
|
+
*
|
|
98
|
+
* @param authHeader - The Authorization header value
|
|
99
|
+
* @returns The JWT token or null if not found/invalid format
|
|
100
|
+
*/
|
|
101
|
+
function extractJWTFromHeader(authHeader) {
|
|
102
|
+
if (!authHeader) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
if (!authHeader.startsWith('Bearer ')) {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
const token = authHeader.substring(7);
|
|
109
|
+
return token.trim() || null;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Create a standardized auth middleware error response
|
|
113
|
+
*
|
|
114
|
+
* @param error - The JWT verification error
|
|
115
|
+
* @returns Standardized error response object
|
|
116
|
+
*/
|
|
117
|
+
function createAuthErrorResponse(error) {
|
|
118
|
+
if (!error) {
|
|
119
|
+
return {
|
|
120
|
+
success: false,
|
|
121
|
+
error: 'Authentication failed',
|
|
122
|
+
message: 'Unknown authentication error',
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
switch (error.type) {
|
|
126
|
+
case 'expired':
|
|
127
|
+
return {
|
|
128
|
+
success: false,
|
|
129
|
+
error: 'Token expired',
|
|
130
|
+
message: 'Your session has expired. Please sign in again.',
|
|
131
|
+
expiredAt: error.expiredAt,
|
|
132
|
+
};
|
|
133
|
+
case 'invalid':
|
|
134
|
+
return {
|
|
135
|
+
success: false,
|
|
136
|
+
error: 'Invalid token',
|
|
137
|
+
message: 'The provided authentication token is invalid.',
|
|
138
|
+
};
|
|
139
|
+
case 'malformed':
|
|
140
|
+
return {
|
|
141
|
+
success: false,
|
|
142
|
+
error: 'Token not ready',
|
|
143
|
+
message: 'The authentication token is not yet valid.',
|
|
144
|
+
availableAt: error.date,
|
|
145
|
+
};
|
|
146
|
+
case 'missing_secret':
|
|
147
|
+
return {
|
|
148
|
+
success: false,
|
|
149
|
+
error: 'Configuration error',
|
|
150
|
+
message: 'Authentication service is not properly configured.',
|
|
151
|
+
};
|
|
152
|
+
default:
|
|
153
|
+
return {
|
|
154
|
+
success: false,
|
|
155
|
+
error: 'Authentication failed',
|
|
156
|
+
message: error.message || 'Authentication verification failed.',
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Example usage for custom middleware:
|
|
162
|
+
*
|
|
163
|
+
* ```typescript
|
|
164
|
+
* import { safeVerifyJWT, extractJWTFromHeader, createAuthErrorResponse } from '@morojs/moro';
|
|
165
|
+
*
|
|
166
|
+
* const authMiddleware = async (req: any, res: any, next: any) => {
|
|
167
|
+
* const token = extractJWTFromHeader(req.headers.authorization);
|
|
168
|
+
*
|
|
169
|
+
* if (!token) {
|
|
170
|
+
* return res.status(401).json({
|
|
171
|
+
* success: false,
|
|
172
|
+
* error: 'Missing token',
|
|
173
|
+
* message: 'Authorization header with Bearer token is required'
|
|
174
|
+
* });
|
|
175
|
+
* }
|
|
176
|
+
*
|
|
177
|
+
* const result = safeVerifyJWT(token, process.env.JWT_SECRET!);
|
|
178
|
+
*
|
|
179
|
+
* if (!result.success) {
|
|
180
|
+
* const errorResponse = createAuthErrorResponse(result.error);
|
|
181
|
+
* return res.status(401).json(errorResponse);
|
|
182
|
+
* }
|
|
183
|
+
*
|
|
184
|
+
* // Token is valid - attach user info to request
|
|
185
|
+
* req.user = result.payload;
|
|
186
|
+
* req.auth = {
|
|
187
|
+
* user: result.payload,
|
|
188
|
+
* isAuthenticated: true,
|
|
189
|
+
* token
|
|
190
|
+
* };
|
|
191
|
+
*
|
|
192
|
+
* next();
|
|
193
|
+
* };
|
|
194
|
+
* ```
|
|
195
|
+
*/
|
|
196
|
+
//# sourceMappingURL=jwt-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt-helpers.js","sourceRoot":"","sources":["../../../../src/core/middleware/built-in/jwt-helpers.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@morojs/moro",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.12",
|
|
4
4
|
"description": "High-performance Node.js framework with intelligent routing, automatic middleware ordering, enterprise authentication (Auth.js), type-safe validation, and functional architecture",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -257,11 +257,11 @@ export const auth = (options: AuthOptions): MiddlewareInterface => ({
|
|
|
257
257
|
},
|
|
258
258
|
});
|
|
259
259
|
|
|
260
|
-
//
|
|
260
|
+
// Auth.js implementation with proper JWT handling
|
|
261
261
|
async function initializeAuthJS(config: AuthOptions): Promise<any> {
|
|
262
262
|
return {
|
|
263
263
|
handler: async (req: any, res: any) => {
|
|
264
|
-
//
|
|
264
|
+
// Basic Auth.js request handler
|
|
265
265
|
const path = req.url.replace(config.basePath!, '');
|
|
266
266
|
|
|
267
267
|
if (path.startsWith('/signin')) {
|
|
@@ -282,7 +282,7 @@ async function initializeAuthJS(config: AuthOptions): Promise<any> {
|
|
|
282
282
|
},
|
|
283
283
|
|
|
284
284
|
getSession: async ({ req }: { req: any }) => {
|
|
285
|
-
//
|
|
285
|
+
// Basic session retrieval
|
|
286
286
|
const sessionId =
|
|
287
287
|
req.cookies?.['next-auth.session-token'] ||
|
|
288
288
|
req.cookies?.['__Secure-next-auth.session-token'];
|
|
@@ -298,71 +298,63 @@ async function initializeAuthJS(config: AuthOptions): Promise<any> {
|
|
|
298
298
|
},
|
|
299
299
|
|
|
300
300
|
verifyJWT: async (token: string) => {
|
|
301
|
-
//
|
|
301
|
+
// Require jsonwebtoken for JWT verification
|
|
302
|
+
let jwt: any;
|
|
302
303
|
try {
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
// if (error.name === 'TokenExpiredError') {
|
|
311
|
-
// // Token expired - handled gracefully by auth middleware
|
|
312
|
-
// throw error;
|
|
313
|
-
// } else if (error.name === 'JsonWebTokenError') {
|
|
314
|
-
// // Invalid token format
|
|
315
|
-
// throw error;
|
|
316
|
-
// } else {
|
|
317
|
-
// // Other JWT errors
|
|
318
|
-
// throw error;
|
|
319
|
-
// }
|
|
320
|
-
// }
|
|
321
|
-
|
|
322
|
-
// Mock implementation for development
|
|
323
|
-
if (!token || token.split('.').length !== 3) {
|
|
324
|
-
const error = new Error('Invalid token format');
|
|
325
|
-
error.name = 'JsonWebTokenError';
|
|
326
|
-
throw error;
|
|
327
|
-
}
|
|
304
|
+
jwt = require('jsonwebtoken');
|
|
305
|
+
} catch (error) {
|
|
306
|
+
throw new Error(
|
|
307
|
+
'JWT verification requires the "jsonwebtoken" package. ' +
|
|
308
|
+
'Please install it with: npm install jsonwebtoken @types/jsonwebtoken'
|
|
309
|
+
);
|
|
310
|
+
}
|
|
328
311
|
|
|
329
|
-
|
|
312
|
+
const secret = process.env.JWT_SECRET || config.jwt?.secret || config.secret;
|
|
313
|
+
if (!secret) {
|
|
314
|
+
throw new Error(
|
|
315
|
+
'JWT verification requires a secret. ' +
|
|
316
|
+
'Please set JWT_SECRET environment variable, or provide jwt.secret or secret in auth config.'
|
|
317
|
+
);
|
|
318
|
+
}
|
|
330
319
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
320
|
+
try {
|
|
321
|
+
const decoded = jwt.verify(token, secret);
|
|
322
|
+
return decoded;
|
|
323
|
+
} catch (error: any) {
|
|
324
|
+
// Handle specific JWT errors gracefully
|
|
325
|
+
if (error.name === 'TokenExpiredError') {
|
|
326
|
+
// Token expired - handled gracefully by auth middleware
|
|
336
327
|
throw error;
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
if (error instanceof Error) {
|
|
328
|
+
} else if (error.name === 'JsonWebTokenError') {
|
|
329
|
+
// Invalid token format
|
|
330
|
+
throw error;
|
|
331
|
+
} else if (error.name === 'NotBeforeError') {
|
|
332
|
+
// Token not active yet
|
|
343
333
|
throw error;
|
|
334
|
+
} else {
|
|
335
|
+
// Other JWT errors
|
|
336
|
+
throw new Error(`JWT verification failed: ${error.message}`);
|
|
344
337
|
}
|
|
345
|
-
throw new Error('JWT verification failed');
|
|
346
338
|
}
|
|
347
339
|
},
|
|
348
340
|
|
|
349
341
|
signIn: async (provider?: string, options?: any) => {
|
|
350
|
-
//
|
|
342
|
+
// Basic sign in redirect
|
|
351
343
|
return { url: `${config.basePath}/signin${provider ? `/${provider}` : ''}` };
|
|
352
344
|
},
|
|
353
345
|
|
|
354
346
|
signOut: async (options?: any) => {
|
|
355
|
-
//
|
|
347
|
+
// Basic sign out redirect
|
|
356
348
|
return { url: `${config.basePath}/signout` };
|
|
357
349
|
},
|
|
358
350
|
|
|
359
351
|
updateSession: async (session: any) => {
|
|
360
|
-
//
|
|
352
|
+
// Basic session update
|
|
361
353
|
return session;
|
|
362
354
|
},
|
|
363
355
|
|
|
364
356
|
getCsrfToken: async () => {
|
|
365
|
-
//
|
|
357
|
+
// Basic CSRF token generation
|
|
366
358
|
const crypto = require('crypto');
|
|
367
359
|
return crypto.randomBytes(32).toString('hex');
|
|
368
360
|
},
|
|
@@ -33,6 +33,14 @@ export {
|
|
|
33
33
|
sessionHelpers,
|
|
34
34
|
} from './auth-helpers';
|
|
35
35
|
|
|
36
|
+
// JWT Utilities for Custom Middleware
|
|
37
|
+
export {
|
|
38
|
+
safeVerifyJWT,
|
|
39
|
+
extractJWTFromHeader,
|
|
40
|
+
createAuthErrorResponse,
|
|
41
|
+
type JWTVerificationResult,
|
|
42
|
+
} from './jwt-helpers';
|
|
43
|
+
|
|
36
44
|
export {
|
|
37
45
|
extendedProviders,
|
|
38
46
|
enterpriseProviders,
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JWT Error Handling Utilities for Custom Middleware
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities to help users handle JWT errors gracefully
|
|
5
|
+
* in their custom authentication middleware.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export interface JWTVerificationResult {
|
|
9
|
+
success: boolean;
|
|
10
|
+
payload?: any;
|
|
11
|
+
error?: {
|
|
12
|
+
type: 'expired' | 'invalid' | 'malformed' | 'missing_secret' | 'unknown';
|
|
13
|
+
message: string;
|
|
14
|
+
expiredAt?: Date;
|
|
15
|
+
date?: Date;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Safely verify a JWT token with proper error handling
|
|
21
|
+
*
|
|
22
|
+
* @param token - The JWT token to verify
|
|
23
|
+
* @param secret - The secret key for verification
|
|
24
|
+
* @param options - Additional JWT verification options
|
|
25
|
+
* @returns JWTVerificationResult with success status and payload or error details
|
|
26
|
+
*/
|
|
27
|
+
export function safeVerifyJWT(
|
|
28
|
+
token: string,
|
|
29
|
+
secret: string,
|
|
30
|
+
options: any = {}
|
|
31
|
+
): JWTVerificationResult {
|
|
32
|
+
// Check if jsonwebtoken is available
|
|
33
|
+
let jwt: any;
|
|
34
|
+
try {
|
|
35
|
+
jwt = require('jsonwebtoken');
|
|
36
|
+
} catch (error) {
|
|
37
|
+
return {
|
|
38
|
+
success: false,
|
|
39
|
+
error: {
|
|
40
|
+
type: 'missing_secret',
|
|
41
|
+
message:
|
|
42
|
+
'JWT verification requires the "jsonwebtoken" package. ' +
|
|
43
|
+
'Please install it with: npm install jsonwebtoken @types/jsonwebtoken',
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (!secret) {
|
|
49
|
+
return {
|
|
50
|
+
success: false,
|
|
51
|
+
error: {
|
|
52
|
+
type: 'missing_secret',
|
|
53
|
+
message:
|
|
54
|
+
'JWT verification requires a secret. ' +
|
|
55
|
+
'Please provide a secret for token verification.',
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
try {
|
|
61
|
+
const payload = jwt.verify(token, secret, options);
|
|
62
|
+
return {
|
|
63
|
+
success: true,
|
|
64
|
+
payload,
|
|
65
|
+
};
|
|
66
|
+
} catch (error: any) {
|
|
67
|
+
// Handle specific JWT errors gracefully
|
|
68
|
+
if (error.name === 'TokenExpiredError') {
|
|
69
|
+
return {
|
|
70
|
+
success: false,
|
|
71
|
+
error: {
|
|
72
|
+
type: 'expired',
|
|
73
|
+
message: 'JWT token has expired',
|
|
74
|
+
expiredAt: error.expiredAt,
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
} else if (error.name === 'JsonWebTokenError') {
|
|
78
|
+
return {
|
|
79
|
+
success: false,
|
|
80
|
+
error: {
|
|
81
|
+
type: 'invalid',
|
|
82
|
+
message: 'Invalid JWT token format or signature',
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
} else if (error.name === 'NotBeforeError') {
|
|
86
|
+
return {
|
|
87
|
+
success: false,
|
|
88
|
+
error: {
|
|
89
|
+
type: 'malformed',
|
|
90
|
+
message: 'JWT token is not active yet',
|
|
91
|
+
date: error.date,
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
} else {
|
|
95
|
+
return {
|
|
96
|
+
success: false,
|
|
97
|
+
error: {
|
|
98
|
+
type: 'unknown',
|
|
99
|
+
message: `JWT verification failed: ${error.message}`,
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Extract JWT token from Authorization header
|
|
108
|
+
*
|
|
109
|
+
* @param authHeader - The Authorization header value
|
|
110
|
+
* @returns The JWT token or null if not found/invalid format
|
|
111
|
+
*/
|
|
112
|
+
export function extractJWTFromHeader(authHeader: string | undefined): string | null {
|
|
113
|
+
if (!authHeader) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (!authHeader.startsWith('Bearer ')) {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const token = authHeader.substring(7);
|
|
122
|
+
return token.trim() || null;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Create a standardized auth middleware error response
|
|
127
|
+
*
|
|
128
|
+
* @param error - The JWT verification error
|
|
129
|
+
* @returns Standardized error response object
|
|
130
|
+
*/
|
|
131
|
+
export function createAuthErrorResponse(error: JWTVerificationResult['error']) {
|
|
132
|
+
if (!error) {
|
|
133
|
+
return {
|
|
134
|
+
success: false,
|
|
135
|
+
error: 'Authentication failed',
|
|
136
|
+
message: 'Unknown authentication error',
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
switch (error.type) {
|
|
141
|
+
case 'expired':
|
|
142
|
+
return {
|
|
143
|
+
success: false,
|
|
144
|
+
error: 'Token expired',
|
|
145
|
+
message: 'Your session has expired. Please sign in again.',
|
|
146
|
+
expiredAt: error.expiredAt,
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
case 'invalid':
|
|
150
|
+
return {
|
|
151
|
+
success: false,
|
|
152
|
+
error: 'Invalid token',
|
|
153
|
+
message: 'The provided authentication token is invalid.',
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
case 'malformed':
|
|
157
|
+
return {
|
|
158
|
+
success: false,
|
|
159
|
+
error: 'Token not ready',
|
|
160
|
+
message: 'The authentication token is not yet valid.',
|
|
161
|
+
availableAt: error.date,
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
case 'missing_secret':
|
|
165
|
+
return {
|
|
166
|
+
success: false,
|
|
167
|
+
error: 'Configuration error',
|
|
168
|
+
message: 'Authentication service is not properly configured.',
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
default:
|
|
172
|
+
return {
|
|
173
|
+
success: false,
|
|
174
|
+
error: 'Authentication failed',
|
|
175
|
+
message: error.message || 'Authentication verification failed.',
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Example usage for custom middleware:
|
|
182
|
+
*
|
|
183
|
+
* ```typescript
|
|
184
|
+
* import { safeVerifyJWT, extractJWTFromHeader, createAuthErrorResponse } from '@morojs/moro';
|
|
185
|
+
*
|
|
186
|
+
* const authMiddleware = async (req: any, res: any, next: any) => {
|
|
187
|
+
* const token = extractJWTFromHeader(req.headers.authorization);
|
|
188
|
+
*
|
|
189
|
+
* if (!token) {
|
|
190
|
+
* return res.status(401).json({
|
|
191
|
+
* success: false,
|
|
192
|
+
* error: 'Missing token',
|
|
193
|
+
* message: 'Authorization header with Bearer token is required'
|
|
194
|
+
* });
|
|
195
|
+
* }
|
|
196
|
+
*
|
|
197
|
+
* const result = safeVerifyJWT(token, process.env.JWT_SECRET!);
|
|
198
|
+
*
|
|
199
|
+
* if (!result.success) {
|
|
200
|
+
* const errorResponse = createAuthErrorResponse(result.error);
|
|
201
|
+
* return res.status(401).json(errorResponse);
|
|
202
|
+
* }
|
|
203
|
+
*
|
|
204
|
+
* // Token is valid - attach user info to request
|
|
205
|
+
* req.user = result.payload;
|
|
206
|
+
* req.auth = {
|
|
207
|
+
* user: result.payload,
|
|
208
|
+
* isAuthenticated: true,
|
|
209
|
+
* token
|
|
210
|
+
* };
|
|
211
|
+
*
|
|
212
|
+
* next();
|
|
213
|
+
* };
|
|
214
|
+
* ```
|
|
215
|
+
*/
|