feat: set JWT token field name with saveToJWT (#3126)

This commit is contained in:
Dan Ribbens
2023-08-04 13:22:05 -04:00
committed by GitHub
parent 1c15868b50
commit 356f174b9f
7 changed files with 46 additions and 19 deletions

View File

@@ -18,16 +18,17 @@ export const getFieldsToSign = (args: {
...signedFields,
};
// get subfields from non-named fields like rows
if (!fieldAffectsData(field) && fieldHasSubFields(field)) {
field.fields.forEach((subField) => {
if (fieldAffectsData(subField) && subField.saveToJWT) {
result[subField.name] = user[subField.name];
result[typeof subField.saveToJWT === 'string' ? subField.saveToJWT : subField.name] = user[subField.name];
}
});
}
if (fieldAffectsData(field) && field.saveToJWT) {
result[field.name] = user[field.name];
result[typeof field.saveToJWT === 'string' ? field.saveToJWT : field.name] = user[field.name];
}
return result;

View File

@@ -3,7 +3,7 @@ import { Response } from 'express';
import { Collection } from '../../collections/config/types';
import { APIError } from '../../errors';
import getCookieExpiration from '../../utilities/getCookieExpiration';
import { fieldAffectsData } from '../../fields/config/types';
import { getFieldsToSign } from './getFieldsToSign';
import { PayloadRequest } from '../../express/types';
import { authenticateLocalStrategy } from '../strategies/local/authenticate';
import { generatePasswordSaltHash } from '../strategies/local/generatePasswordSaltHash';
@@ -83,18 +83,10 @@ async function resetPassword(args: Arguments): Promise<Result> {
await authenticateLocalStrategy({ password: data.password, doc });
const fieldsToSign = collectionConfig.fields.reduce((signedFields, field) => {
if (fieldAffectsData(field) && field.saveToJWT) {
return {
...signedFields,
[field.name]: user[field.name],
};
}
return signedFields;
}, {
const fieldsToSign = getFieldsToSign({
collectionConfig,
user,
email: user.email,
id: user.id,
collection: collectionConfig.slug,
});
const token = jwt.sign(

View File

@@ -33,7 +33,10 @@ export const baseField = joi.object().keys({
joi.valid(false),
),
required: joi.boolean().default(false),
saveToJWT: joi.boolean().default(false),
saveToJWT: joi.alternatives().try(
joi.boolean(),
joi.string(),
).default(false),
unique: joi.boolean().default(false),
localized: joi.boolean().default(false),
index: joi.boolean().default(false),

View File

@@ -1,7 +1,7 @@
/* eslint-disable no-use-before-define */
import { CSSProperties } from 'react';
import { Editor } from 'slate';
import type { TFunction, i18n as Ii18n } from 'i18next';
import type { i18n as Ii18n, TFunction } from 'i18next';
import type { EditorProps } from '@monaco-editor/react';
import { Operation, Where } from '../../types';
import { SanitizedConfig } from '../../config/types';
@@ -108,7 +108,7 @@ export interface FieldBase {
index?: boolean;
defaultValue?: any;
hidden?: boolean;
saveToJWT?: boolean
saveToJWT?: string | boolean;
localized?: boolean;
validate?: Validate;
hooks?: {