Issue with Google OAuth in Expo with Hono backend

I get this error when I select my Gmail account with which I want to sign in. My backend auth:
import type { InferSelectModel } from "drizzle-orm";

import { expo } from "@better-auth/expo";
import { betterAuth } from "better-auth";
import { drizzleAdapter } from "better-auth/adapters/drizzle";
import dotenv from "dotenv";

import { db } from "@/db/db";
import { accounts, sessions, users, verifications } from "@/db/schema/auth";
import { userCredits } from "@/db/schema/data";
import env from "@/env";

dotenv.config();

export const auth = betterAuth({
user: {
modelName: "users",
},
verification: {
modelName: "verifications",
},
session: {
modelName: "sessions",
},
account: {
modelName: "accounts",
},
database: drizzleAdapter(db, {
provider: "pg",
schema: {
users,
verifications,
sessions,
accounts,
},
}),
emailAndPassword: {
enabled: true,
},
socialProviders: {
google: {
clientId: env.GOOGLE_CLIENT_ID,
clientSecret: env.GOOGLE_CLIENT_SECRET,
},
},
plugins: [expo()],
trustedOrigins: [
"myscheme://",
],
});

export type User = InferSelectModel<typeof users>;
export type Session = InferSelectModel<typeof sessions>;

export type AuthSession = {
user: User | null;
session: Session | null;
};
import type { InferSelectModel } from "drizzle-orm";

import { expo } from "@better-auth/expo";
import { betterAuth } from "better-auth";
import { drizzleAdapter } from "better-auth/adapters/drizzle";
import dotenv from "dotenv";

import { db } from "@/db/db";
import { accounts, sessions, users, verifications } from "@/db/schema/auth";
import { userCredits } from "@/db/schema/data";
import env from "@/env";

dotenv.config();

export const auth = betterAuth({
user: {
modelName: "users",
},
verification: {
modelName: "verifications",
},
session: {
modelName: "sessions",
},
account: {
modelName: "accounts",
},
database: drizzleAdapter(db, {
provider: "pg",
schema: {
users,
verifications,
sessions,
accounts,
},
}),
emailAndPassword: {
enabled: true,
},
socialProviders: {
google: {
clientId: env.GOOGLE_CLIENT_ID,
clientSecret: env.GOOGLE_CLIENT_SECRET,
},
},
plugins: [expo()],
trustedOrigins: [
"myscheme://",
],
});

export type User = InferSelectModel<typeof users>;
export type Session = InferSelectModel<typeof sessions>;

export type AuthSession = {
user: User | null;
session: Session | null;
};
No description
3 Replies
Sulek
SulekOP2d ago
My auth client in Expo:
import { createAuthClient } from "better-auth/react";
import { expoClient } from "@better-auth/expo/client";
import * as SecureStore from "expo-secure-store";

export const authClient = createAuthClient({
baseURL: "http://192.168.1.250:3000",
plugins: [
expoClient({
scheme: "myscheme",
storagePrefix: "myscheme_auth",
storage: SecureStore,
}),
],
socialProviders: {
google: {
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
},
},
});
import { createAuthClient } from "better-auth/react";
import { expoClient } from "@better-auth/expo/client";
import * as SecureStore from "expo-secure-store";

export const authClient = createAuthClient({
baseURL: "http://192.168.1.250:3000",
plugins: [
expoClient({
scheme: "myscheme",
storagePrefix: "myscheme_auth",
storage: SecureStore,
}),
],
socialProviders: {
google: {
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
},
},
});
Sulek
SulekOP2d ago
My Google Cloud:
No description
Lick A Brick
Lick A Brick2d ago
localhost is 127.0.0.1 as in this is the current device. As per your screenshot your phone expects the server to run on your actual phone which in most cases is not the case. Read the steps in https://www.better-auth.com/docs/authentication/google#get-your-google-credentials carefully. As you have updated the baseUrl you should also update/add the redirect URI at Google Cloud accordingly.
Google | Better Auth
Google provider setup and usage.

Did you find this page helpful?