fix: github provider should infer redirect_uri

This commit is contained in:
Bereket Engida
2024-10-05 17:22:01 +03:00
parent e3feda5e3e
commit 1004d956a8
5 changed files with 24 additions and 19 deletions

View File

@@ -4,14 +4,11 @@ import { reactInvitationEmail } from "./email/invitation";
import { LibsqlDialect } from "@libsql/kysely-libsql";
import { reactResetPasswordEmail } from "./email/rest-password";
import { resend } from "./email/resend";
import Database from "better-sqlite3";
const from = process.env.BETTER_AUTH_EMAIL || "delivered@resend.dev";
const to = process.env.TEST_EMAIL || "";
export const auth = betterAuth({
database: new LibsqlDialect({
url: process.env.TURSO_DATABASE_URL || "",
authToken: process.env.TURSO_AUTH_TOKEN || "",
}),
database: new Database("better-auth.db"),
emailAndPassword: {
enabled: true,
async sendResetPassword(url, user) {

View File

@@ -45,8 +45,10 @@
"@react-email/components": "^0.0.25",
"@react-three/fiber": "^8.17.7",
"@tanstack/react-query": "^5.56.2",
"@types/better-sqlite3": "^7.6.11",
"better-auth": "workspace:*",
"better-call": "0.2.3-beta.2",
"better-sqlite3": "^11.3.0",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.1",
"cmdk": "1.0.0",

View File

@@ -69,7 +69,6 @@ export const callbackOAuth = createAuthEndpoint(
...user,
id,
});
console.log({ user, data });
const parsedState = parseState(c.query.state);
if (!parsedState.success) {
c.context.logger.error("Unable to parse state");

View File

@@ -1,7 +1,7 @@
import { betterFetch } from "@better-fetch/fetch";
import { GitHub } from "arctic";
import type { OAuthProvider, ProviderOptions } from ".";
import { getRedirectURI } from "./utils";
import { getRedirectURI, validateAuthorizationCode } from "./utils";
export interface GithubProfile {
login: string;
@@ -53,26 +53,27 @@ export interface GithubProfile {
}
export interface GithubOptions extends ProviderOptions {}
export const github = ({
clientId,
clientSecret,
scope,
redirectURI,
}: GithubOptions) => {
export const github = (options: GithubOptions) => {
const githubArctic = new GitHub(
clientId,
clientSecret,
getRedirectURI("github", redirectURI),
options.clientId,
options.clientSecret,
getRedirectURI("github", options.redirectURI),
);
const tokenEndpoint = "https://github.com/login/oauth/access_token";
return {
id: "github",
name: "Github",
createAuthorizationURL({ state, scopes }) {
const _scopes = scope || scopes || ["user:email"];
const _scopes = options.scope || scopes || ["user:email"];
return githubArctic.createAuthorizationURL(state, _scopes);
},
validateAuthorizationCode: async (state) => {
return await githubArctic.validateAuthorizationCode(state);
validateAuthorizationCode: async (code, _, redirect) => {
return validateAuthorizationCode({
code,
redirectURI: options.redirectURI || getRedirectURI("google", redirect),
options,
tokenEndpoint,
});
},
async getUserInfo(token) {
const { data: profile, error } = await betterFetch<GithubProfile>(

6
pnpm-lock.yaml generated
View File

@@ -149,12 +149,18 @@ importers:
'@tanstack/react-query':
specifier: ^5.56.2
version: 5.56.2(react@19.0.0-rc-7771d3a7-20240827)
'@types/better-sqlite3':
specifier: ^7.6.11
version: 7.6.11
better-auth:
specifier: workspace:*
version: link:../../packages/better-auth
better-call:
specifier: 0.2.3-beta.2
version: 0.2.3-beta.2
better-sqlite3:
specifier: ^11.3.0
version: 11.3.0
class-variance-authority:
specifier: ^0.7.0
version: 0.7.0