Merge pull request #1342 from automatisch/lowercase-email

fix: Lowercase user email before insert and update
This commit is contained in:
Ömer Faruk Aydın
2023-10-14 13:42:05 +02:00
committed by GitHub
5 changed files with 28 additions and 4 deletions

View File

@@ -0,0 +1,13 @@
import { Knex } from 'knex';
export async function up(knex: Knex): Promise<void> {
await knex('users')
.whereRaw('email != LOWER(email)')
.update({
email: knex.raw('LOWER(email)'),
});
}
export async function down(): Promise<void> {
// void
}

View File

@@ -13,12 +13,18 @@ type Params = {
};
};
const createUser = async (_parent: unknown, params: Params, context: Context) => {
const createUser = async (
_parent: unknown,
params: Params,
context: Context
) => {
context.currentUser.can('create', 'User');
const { fullName, email, password } = params.input;
const existingUser = await User.query().findOne({ email });
const existingUser = await User.query().findOne({
email: email.toLowerCase(),
});
if (existingUser) {
throw new Error('User already exists!');

View File

@@ -15,7 +15,7 @@ type Params = {
const forgotPassword = async (_parent: unknown, params: Params) => {
const { email } = params.input;
const user = await User.query().findOne({ email });
const user = await User.query().findOne({ email: email.toLowerCase() });
if (!user) {
throw new Error('Email address not found!');

View File

@@ -12,7 +12,9 @@ type Params = {
const registerUser = async (_parent: unknown, params: Params) => {
const { fullName, email, password } = params.input;
const existingUser = await User.query().findOne({ email });
const existingUser = await User.query().findOne({
email: email.toLowerCase(),
});
if (existingUser) {
throw new Error('User already exists!');

View File

@@ -263,6 +263,8 @@ class User extends Base {
async $beforeInsert(queryContext: QueryContext) {
await super.$beforeInsert(queryContext);
this.email = this.email.toLowerCase();
await this.generateHash();
if (appConfig.isCloud) {
@@ -273,6 +275,7 @@ class User extends Base {
async $beforeUpdate(opt: ModelOptions, queryContext: QueryContext) {
await super.$beforeUpdate(opt, queryContext);
this.email = this.email.toLowerCase();
await this.generateHash();
}