Как обрабатывать .env.local в следующем файле машинописного текста js?


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 в строку, но, похоже, это не работает.

Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
2
0
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Технически ваше приложение будет иметь эти окружения в любом случае, пока вы не упомянете их в своем файле окружения, и без них ваше приложение не должно работать. Также 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!; 

Просто скопируйте и вставьте этот код и дайте мне знать, если у вас по-прежнему возникнут какие-либо проблемы.

Если ваша проблема решена, можете ли вы принять это как ответ на свой вопрос, пожалуйста?

Fakhrul Islam Fuad 26.06.2024 08:38

Другие вопросы по теме