-
-
Notifications
You must be signed in to change notification settings - Fork 3.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
providers
doesn't accept type OAuthConfig<T>
#6174
Comments
Not SvelteKit specific. When a provider is imported, it should extend the The tricky part is that it should be dependent on the value of Eg.: jwt({ account, profile }){
if(account?.providerAccountId === "github") {
// profile should have the shape of `GithubProfile` inside here
}
} We can tackle half the problem by module augmentation, i.e.: declare module "../types.js" {
interface Profile extends GithubProfile {}
} Adding this to https://github.com/nextauthjs/next-auth/blob/main/packages/core/src/providers/github.ts But the last I tried, I could not augment the same interface with more than one Profile at the same time. If TypeScript gurus read this, help would be appreciated! |
Until we find a permanent solution, to disable linting (red wavy underline) in VS Code, I am using below comments at top of the file. /* eslint-disable */
// @ts-nocheck |
provider
option in SvelteKitAuth
doesn't accept type OAuthConfig<T>
providers
doesn't accept type OAuthConfig<T>
This sounds like perhaps a backwards way to do it. You're essentially tricking the TS compiler into thinking GithubProfile matches the interface of Profile, which can make the error go away, but doesn't solve the root problem. Semantically, I would expect the opposite: GithubProfile (more specific) should be an extension of Profile (more general). I'm not that familiar with the internal types of AuthJS yet, but I think this is written incorrectly (or at least oddly): @auth/core/src/providers/github.ts export default function GitHub<Profile extends GithubProfile>(
options: OAuthUserConfig<Profile>
): OAuthConfig<Profile> {
....
} Here we're telling TS that the generic type used within the function (Profile) should extend from GithubProfile, but shouldn't the actual GithubProfile type extend from the actual Profile type instead?: @auth/core/src/providers/index.ts export type Provider<P extends Profile = Profile> = (
| OIDCConfig<P>
| OAuth2Config<P>
| EmailConfig
| CredentialsConfig
) & {
options: Record<string, unknown>
} Which would make this closer to the solution? @auth/core/src/providers/github.ts export interface GithubProfile extends Profile {
...
}
export default function GitHub(
options: OAuthUserConfig<GithubProfile>
): OAuthConfig<GithubProfile> {
...
} Then, we don't need to provide the generic with an extension. We just let TS do its job. Just seems like there's a lot of odd TS stuff under the hood here. It looks like the type mismatch is still further down in inference, within the OAuthUserConfig type. |
Same issue here. Working around: providers: [
//@ts-expect-error issue https://github.com/nextauthjs/next-auth/issues/6174
GitHub({ clientId: GITHUB_ID, clientSecret: GITHUB_SECRET })
] |
Mine stopped complaining after doing this. I don't know if it's the right way though. import {SvelteKitAuth} from '@auth/sveltekit'
import type {Handle} from '@sveltejs/kit'
import type {Provider} from '@auth/core/providers'
import type {Profile} from '@auth/core/types'
SvelteKitAuth({
providers: [
Auth0Provider({
// ...
}) as Provider<Profile>
]
}) satisfies Handle |
Piggybacking on the previous comment, import { DISCORD_CLIENT_ID, DISCORD_CLIENT_SECRET } from "$env/static/private";
import type { Provider } from "@auth/core/providers";
import Discord from "@auth/core/providers/discord";
import { SvelteKitAuth } from "@auth/sveltekit";
export const handle = SvelteKitAuth({
providers: [
Discord({
clientId: DISCORD_CLIENT_ID,
clientSecret: DISCORD_CLIENT_SECRET,
}),
] as Provider[],
}); (Using Discord instead of Auth0 of course, but yeah.) |
Furthermore, doing this type assertion should be in the docs, as I imagine that everyone will run into this problem the moment they start using SvelteKitAuth. |
if you have multiple providers, you also use like this export const authjs = SvelteKitAuth({
debug: dev,
providers: [
Google({
clientId: envPri.GOOGLE_ID,
clientSecret: envPri.GOOGLE_SECRET,
authorization: { params: { prompt: 'consent' } }
}),
AzureAD({
clientId: envPri.AZURE_AD_CLIENT_ID,
clientSecret: envPri.AZURE_AD_CLIENT_SECRET,
tenantId: envPri.AZURE_AD_TENANT_ID,
authorization: { params: { scope: 'openid profile User.Read email' } }
// client: {},
}),
GitHub({ clientId: envPri.GITHUB_ID, clientSecret: envPri.GITHUB_SECRET })
] as Provider[]
}) satisfies Handle; |
I don't think so, this is just a workaround, we should fix it instead. |
Definitely agree it should be fixed, but at least a note in the docs in the meantime couldn't hurt. |
A note in the docs and a note to ignore the 'red squiggles' in the official template too. |
Including "just ignore the red underlines" should never be considered. TypeScript complains for a reason, so this should be fixed, bypassing the linting and disabling ts checks is just a temporary solution and shouldn't be considered a regular practice and should not be mentioned in the docs. Ever. |
Right, but the framework is clearly under active development and straight up doesn't work without bypassing the type check currently. A note about the failing type check being a known issue with a temporary workaround in the docs is entirely appropriate at this stage of development. |
This is kind of embarrassing, out of the box default example throws this type errors, bypassing the type checker is not a solution |
When I tried this, I realised that the |
Does it work for you without anything else? Any comment or type assertion? |
Ran into the same issue, I don't see |
Hey @enBonnet, I still had to typecast it using as Provider[] |
It looks like this issue did not receive any activity for 60 days. It will be closed in 7 days if no further activity occurs. If you think your issue is still relevant, commenting will keep it open. Thanks! |
Thanks @Stale (lol), I'll take a look at this issue |
I literally checked 2 hours ago if this has been resolved, go away stale bot. I did some digging and it looks like it's the inconsistency between interface // packages/next-auth/src/core/types.ts
export interface Profile {
sub?: string
name?: string
email?: string
image?: string
} // packages/core/src/types.ts
export interface Profile {
sub?: string | null
name?: string | null
email?: string | null
image?: string | null
} as you can see one of them accepts |
Just hit this. Commenting to avoid stale bot. |
It's definitely still an issue, experiencing it with AzureAd as well. |
Let's get the issue fixed, every single user trying auth.js with typescript hits this issue and makes no sense. |
Can confirm, I spent quite some time trying to figure this out because following the getting started guide leads to this error and causes a lot of confusion |
Good use case for satisfies in the meantime:
|
It looks like this issue did not receive any activity for 60 days. It will be closed in 7 days if no further activity occurs. If you think your issue is still relevant, commenting will keep it open. Thanks! |
Just commenting to avoid stale bot. Is also happening to me, using sveltekit and drizzle adapter |
Monthly stale bot comment. This is still an issue |
still facing that issue... |
November stale bot comment, still revisiting this often a month |
It has been a long time with this issue open, almost a year, I see that in the official examples we are using the Maybe we should update the docs for TS to add this instead of going through every provider to fix it? |
It looks like this issue did not receive any activity for 60 days. It will be closed in 7 days if no further activity occurs. If you think your issue is still relevant, commenting will keep it open. Thanks! |
Environment
System:
OS: Windows 10 10.0.22000
CPU: (4) x64 11th Gen Intel(R) Core(TM) i3-1115G4 @ 3.00GHz
Memory: 2.03 GB / 7.73 GB
Binaries:
Node: 16.16.0 - ~\scoop\apps\nodejs-lts\current\node.EXE
npm: 8.11.0 - ~\scoop\apps\nodejs-lts\current\npm.CMD
Browsers:
Edge: Spartan (44.22000.120.0), Chromium (108.0.1462.54)
Internet Explorer: 11.0.22000.120
Reproduction URL
https://github.com/nextauthjs/sveltekit-auth-example
Describe the issue
the
providers
option inSvelteKitAuth
accepts typeProvider<Profile>[]
but theGithub
Provider is of typeOAuthConfig<GithubProfile>
#6170 (comment)
How to reproduce
Clone the repo, install deps, navigate to the
hooks.server.ts
file or runpnpm check
Expected behavior
there shouldnt be any type error
The text was updated successfully, but these errors were encountered: