Skip to content

Commit

Permalink
✨ Support logto provider (#3630)
Browse files Browse the repository at this point in the history
* ✨ support logto provider

* 🎨 style: format code
  • Loading branch information
cy948 authored Aug 27, 2024
1 parent 7e84d1e commit 3f92adc
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 2 deletions.
10 changes: 10 additions & 0 deletions src/config/auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,11 @@ export const getAuthConfig = () => {
ZITADEL_CLIENT_ID: z.string().optional(),
ZITADEL_CLIENT_SECRET: z.string().optional(),
ZITADEL_ISSUER: z.string().optional(),

// LOGTO
LOGTO_CLIENT_ID: z.string().optional(),
LOGTO_CLIENT_SECRET: z.string().optional(),
LOGTO_ISSUER: z.string().optional(),
},

runtimeEnv: {
Expand Down Expand Up @@ -132,6 +137,11 @@ export const getAuthConfig = () => {
ZITADEL_CLIENT_ID: process.env.ZITADEL_CLIENT_ID,
ZITADEL_CLIENT_SECRET: process.env.ZITADEL_CLIENT_SECRET,
ZITADEL_ISSUER: process.env.ZITADEL_ISSUER,

// LOGTO
LOGTO_CLIENT_ID: process.env.LOGTO_CLIENT_ID,
LOGTO_CLIENT_SECRET: process.env.LOGTO_CLIENT_SECRET,
LOGTO_ISSUER: process.env.LOGTO_ISSUER,
},
});
};
Expand Down
2 changes: 1 addition & 1 deletion src/libs/next-auth/auth.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { ssoProviders } from './sso-providers';
export const initSSOProviders = () => {
return authEnv.NEXT_PUBLIC_ENABLE_NEXT_AUTH
? authEnv.NEXT_AUTH_SSO_PROVIDERS.split(/[,,]/).map((provider) => {
const validProvider = ssoProviders.find((item) => item.id === provider);
const validProvider = ssoProviders.find((item) => item.id === provider.trim());

if (validProvider) return validProvider.provider;

Expand Down
3 changes: 2 additions & 1 deletion src/libs/next-auth/sso-providers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import Authelia from './authelia';
import Authentik from './authentik';
import AzureAD from './azure-ad';
import Github from './github';
import Logto from './logto';
import Zitadel from './zitadel';

export const ssoProviders = [Auth0, Authentik, AzureAD, Github, Zitadel, Authelia];
export const ssoProviders = [Auth0, Authentik, AzureAD, Github, Zitadel, Authelia, Logto];
50 changes: 50 additions & 0 deletions src/libs/next-auth/sso-providers/logto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import { OIDCConfig, OIDCUserConfig } from '@auth/core/providers';

import { authEnv } from '@/config/auth';

import { CommonProviderConfig } from './sso.config';

interface LogtoProfile extends Record<string, any> {
email: string;
id: string;
name?: string;
picture: string;
sub: string;
username: string;
}

function LobeLogtoProvider(config: OIDCUserConfig<LogtoProfile>): OIDCConfig<LogtoProfile> {
return {
...CommonProviderConfig,
...config,
id: 'logto',
name: 'Logto',
profile(profile) {
// You can customize the user profile mapping here
return {
email: profile.email,
id: profile.sub,
image: profile.picture,
name: profile.name ?? profile.username,
providerAccountId: profile.sub,
};
},
type: 'oidc',
};
}

const provider = {
id: 'logto',
provider: LobeLogtoProvider({
authorization: {
params: { scope: 'openid offline_access profile email' },
},
// You can get the issuer value from the Logto Application Details page,
// in the field "Issuer endpoint"
clientId: authEnv.LOGTO_CLIENT_ID,
clientSecret: authEnv.LOGTO_CLIENT_SECRET,
issuer: authEnv.LOGTO_ISSUER,
}),
};

export default provider;

0 comments on commit 3f92adc

Please sign in to comment.