`drizzleAdapter` is not handling `ne` operator

Hello, currently the convertWhereClause (L133) in drizzleAdapter is not handling the ne operator and fallsback to eq by default. Version: 1.2.7 This cause invalid data being returned on filters. See below example: auth.ts
import { betterAuth } from 'better-auth';
import { drizzleAdapter } from 'better-auth/adapters/drizzle';
import { admin } from 'better-auth/plugins';
import { drizzle } from 'drizzle-orm/node-postgres';
import { Pool } from 'pg';

import * as schema from './schema';

export const auth = betterAuth({
database: drizzleAdapter(
drizzle({
client: new Pool({
connectionString: process.env.DB_CONNECTION_STRING,
}),
schema,
}),
{
provider: 'pg',
schema,
},
),
plugins: [admin()],
});
import { betterAuth } from 'better-auth';
import { drizzleAdapter } from 'better-auth/adapters/drizzle';
import { admin } from 'better-auth/plugins';
import { drizzle } from 'drizzle-orm/node-postgres';
import { Pool } from 'pg';

import * as schema from './schema';

export const auth = betterAuth({
database: drizzleAdapter(
drizzle({
client: new Pool({
connectionString: process.env.DB_CONNECTION_STRING,
}),
schema,
}),
{
provider: 'pg',
schema,
},
),
plugins: [admin()],
});
client.ts
import { createAuthClient } from 'better-auth/client';
import { adminClient } from 'better-auth/client/plugins';

export const client = createAuthClient({
plugins: [adminClient()],
});
import { createAuthClient } from 'better-auth/client';
import { adminClient } from 'better-auth/client/plugins';

export const client = createAuthClient({
plugins: [adminClient()],
});
usage.ts
import { client } from './client'

const { data } = await client.admin.listUsers({
query: {
filterField: 'role',
filterOperator: 'ne',
filterValue: 'admin',
},
});

const nonAdmins = data?.users;
// ^ This would return all admins instead.
import { client } from './client'

const { data } = await client.admin.listUsers({
query: {
filterField: 'role',
filterOperator: 'ne',
filterValue: 'admin',
},
});

const nonAdmins = data?.users;
// ^ This would return all admins instead.
Logs enabled debugLogs in drizzleAdapter:
[Better Auth]: [Drizzle Adapter] #2 [1/3] findMany: {
model: 'user',
where: [
{
operator: 'ne',
connector: 'AND',
field: 'role',
value: 'admin'
}
],
limit: 300
}

[Better Auth]: [Drizzle Adapter] #3 [1/2] count: {
model: 'user',
where: [
{
operator: 'ne',
connector: 'AND',
field: 'role',
value: 'admin'
}
]
}
[Better Auth]: [Drizzle Adapter] #2 [1/3] findMany: {
model: 'user',
where: [
{
operator: 'ne',
connector: 'AND',
field: 'role',
value: 'admin'
}
],
limit: 300
}

[Better Auth]: [Drizzle Adapter] #3 [1/2] count: {
model: 'user',
where: [
{
operator: 'ne',
connector: 'AND',
field: 'role',
value: 'admin'
}
]
}
GitHub
better-auth/packages/better-auth/src/adapters/drizzle-adapter/drizz...
The most comprehensive authentication framework for TypeScript - better-auth/better-auth
4 Replies
Ping
Ping•7d ago
Hey, I've opened a PR for this. Thanks for the report.
Ping
Ping•7d ago
Until the PR is merged, you can use this:
npm i https://pkg.pr.new/better-auth/better-auth@2408
npm i https://pkg.pr.new/better-auth/better-auth@2408
0xShumai
0xShumaiOP•7d ago
🫡

Did you find this page helpful?