OAuth integration for GitHub. Refer to Create a GitHub OAuth app for getting the required credentials. Provider id is github
.
import { github } from "@lucia-auth/oauth/providers";
import { auth } from "./lucia.js";
const githubAuth = github(auth, config);
github()
#
const github: (
auth: Auth,
config: {
clientId: string;
clientSecret: string;
scope?: string[];
redirectUri?: string;
}
) => GithubProvider;
Parameters#
name | type | description | optional |
---|
auth | Auth | Lucia instance | |
config.clientId | string | GitHub OAuth app client id | |
config.clientSecret | string | GitHub OAuth app client secret | |
config.scope | string[] | an array of scopes | ✓ |
config.redirectUri | string | an authorized redirect URI | ✓ |
Returns#
Interfaces#
GithubAuth
#
See OAuth2ProviderAuth
.
// implements OAuth2ProviderAuth<GithubAuth<_Auth>>
interface GithubAuth<_Auth extends Auth> {
getAuthorizationUrl: () => Promise<readonly [url: URL, state: string]>;
validateCallback: (code: string) => Promise<GithubUserAuth<_Auth>>;
}
Generics#
name | extends | default |
---|
_Auth | Auth | Auth |
GithubTokens
#
type GithubTokens =
| {
accessToken: string;
accessTokenExpiresIn: null;
}
| {
accessToken: string;
accessTokenExpiresIn: number;
refreshToken: string;
refreshTokenExpiresIn: number;
};
GithubUser
#
type GithubUser = PublicGithubUser | PrivateGithubUser;
type PublicGithubUser = {
avatar_url: string;
bio: string | null;
blog: string | null;
company: string | null;
created_at: string;
email: string | null;
events_url: string;
followers: number;
followers_url: string;
following: number;
following_url: string;
gists_url: string;
gravatar_id: string | null;
hireable: boolean | null;
html_url: string;
id: number;
location: string | null;
login: string;
name: string | null;
node_id: string;
organizations_url: string;
public_gists: number;
public_repos: number;
received_events_url: string;
repos_url: string;
site_admin: boolean;
starred_url: string;
subscriptions_url: string;
type: string;
updated_at: string;
url: string;
twitter_username?: string | null;
plan?: {
name: string;
space: number;
private_repos: number;
collaborators: number;
};
suspended_at?: string | null;
};
type PrivateGithubUser = PublicGithubUser & {
collaborators: number;
disk_usage: number;
owned_private_repos: number;
private_gists: number;
total_private_repos: number;
two_factor_authentication: boolean;
business_plus?: boolean;
ldap_dn?: string;
};
GithubUserAuth
#
Extends ProviderUserAuth
.
interface GithubUserAuth<_Auth extends Auth> extends ProviderUserAuth<_Auth> {
githubUser: GithubUser;
githubTokens: GithubTokens;
}
Generics#