import GithubProvider from "next-auth/providers/github"
import GoogleProvider from "next-auth/providers/google"
const GITHUB_ID: string = process.env.GITHUB_ID as string;
const GITHUB_SECRET: string = process.env.GITHUB_SECRET as string;
const GOOLE_ID: string = process.env.GOOGLE_ID as string;
const GOOGLE_SECRET: string = process.env.GOOGLE_SECRET as string;
if (typeof GITHUB_ID !== "string") {
throw new Error("GITHUB_ID is not a String! check your env file")
}
if (typeof GITHUB_SECRET !== "string") {
throw new Error("GITHUB_SECRET is not a String, check your env file")
}
if (typeof GOOLE_ID !== "string") {
throw new Error("GOOLE_ID is not a String, check your env file")
}
if (typeof GOOGLE_SECRET !== "string") {
throw new Error("GITHUB_ID is not a String, check your env file")
}
export const options = {
providers: [
GithubProvider({
profile(profile) {
console.info("Profile Github", profile)
return {
...profile,
id: profile.sub,
}
},
clientId: GITHUB_ID,
clientSecret: GITHUB_SECRET
}),
GoogleProvider({
profile(profile) {
console.info("Profile Google", profile)
return {
...profile,
id: profile.sub,
}
},
clientId: GOOLE_ID,
clientSecret: GOOGLE_SECRET,
})
]
}
Я пытаюсь поместить переменные среды в cliendID
и clientSecret
, но до этого кода отображалась ошибка типа, где process.env.GITHUB_ID is 'string | undefined' and cannot be declared to clientID which is a 'string' type
. Я не знаю, правильный ли это способ справиться с этим. Но есть ли лучшая альтернатива?
Я пробовал другие способы преобразования процесса.env.GITHUB_ID в строку, но, похоже, это не работает.
Технически ваше приложение будет иметь эти окружения в любом случае, пока вы не упомянете их в своем файле окружения, и без них ваше приложение не должно работать. Также next-auth сам будет обрабатывать неправильные входные данные env.
Итак, в вашем случае вы можете просто упомянуть env в clientId и clientSecret следующим образом:
clientId: process.env.GITHUB_ID,
clientSecret: process.env.GITHUB_SECRET,
Документация next-auth v4 также следует этому
Если вы используете auth.js, который является версией 5 следующей аутентификации, вам не нужно явно указывать clientId и clientSecret, если ваши переменные среды имеют точные предопределенные имена, как указано в документации auth.js.
В вашем случае для провайдеров github и google что-то вроде этого
AUTH_GITHUB_ID = {CLIENT_ID}
AUTH_GITHUB_SECRET = {CLIENT_SECRET}
AUTH_GOOGLE_ID = {CLIENT_ID}
AUTH_GOOGLE_SECRET = {CLIENT_SECRET}
Кроме того, как правило, в других случаях мне нравится обращаться с env и машинописным текстом.
const GITHUB_ID: string = process.env.GITHUB_ID || “”
Просто из-за того, что переменные среды будут присутствовать, если в файлах .env есть эта переменная или если развертывание было выполнено правильно.
Поскольку вы сами объявляете переменные env, бессмысленно проверять, существуют они или нет. Итак, вы можете полностью удалить эту часть:
if (typeof GITHUB_ID !== "string") {
throw new Error("GITHUB_ID is not a String! check your env file")
}
if (typeof GITHUB_SECRET !== "string") {
throw new Error("GITHUB_SECRET is not a String, check your env file")
}
if (typeof GOOLE_ID !== "string") {
throw new Error("GOOLE_ID is not a String, check your env file")
}
if (typeof GOOGLE_SECRET !== "string") {
throw new Error("GITHUB_ID is not a String, check your env file")
}
Затем, чтобы избежать ошибки машинописного текста, вы можете объявить переменные указанным ниже способом, и проблема будет устранена:
const GITHUB_ID = process.env.GITHUB_ID!;
const GITHUB_SECRET= process.env.GITHUB_SECRET!;
const GOOLE_ID= process.env.GOOGLE_ID!;
const GOOGLE_SECRET= process.env.GOOGLE_SECRET!;
Просто скопируйте и вставьте этот код и дайте мне знать, если у вас по-прежнему возникнут какие-либо проблемы.
Если ваша проблема решена, можете ли вы принять это как ответ на свой вопрос, пожалуйста?