【发布时间】:2021-11-25 01:04:48
【问题描述】:
我正在为我的应用使用 NextAuth:
我尝试将数据提取到的主文件:[...nextauth].js
import NextAuth from "next-auth"
import Providers from "next-auth/providers"
export default NextAuth({
// Configure one or more authentication providers
providers: [
Providers.Google({
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
}),
// ...add more providers here
],
当我将鼠标悬停在“Google”上时收到的错误 vscode 消息:
Property 'Google' does not exist on type 'typeof import("/home/abda_react/abdn2/node_modules/next-auth/providers/index")'.ts(2339)
我从 Nextjs 得到的消息:
Failed to compile
./pages/api/auth/[...nextauth].js:2:0
Module not found: Package path ./providers is not exported from package /home/abda_react/abdn2/node_modules/next-auth (see exports field in /home/abda_react/abdn2/node_modules/next-auth/package.json)
1 | import NextAuth from "next-auth"
> 2 | import Providers from "next-auth/providers"
3 |
4 | export default NextAuth({
5 | // Configure one or more authentication providers
Import trace for requested module:
https://nextjs.org/docs/messages/module-not-found
节点模块的路径:
node_modules > next-auth > {} package.json > {} 导出
"exports": {
".": "./index.js",
"./jwt": "./jwt/index.js",
"./react": "./react/index.js",
"./providers/*": "./providers/*.js"
},
index.js 文件:
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
var _exportNames = {};
Object.defineProperty(exports, "default", {
enumerable: true,
get: function () {
return _server.default;
}
});
var _server = _interopRequireDefault(require("./server"));
var _types = require("./server/types");
Object.keys(_types).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
if (key in exports && exports[key] === _types[key]) return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function () {
return _types[key];
}
});
});
最后是 google.js 文件:
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = Google;
function Google(options) {
return {
id: "google",
name: "Google",
type: "oauth",
wellKnown: "https://accounts.google.com/.well-known/openid-configuration",
authorization: {
params: {
scope: "openid email profile"
}
},
idToken: true,
checks: ["pkce", "state"],
profile(profile) {
return {
id: profile.sub,
name: profile.name,
email: profile.email,
image: profile.picture
};
},
options
};
}
和 google.d.ts 文件:
import { OAuthConfig, OAuthUserConfig } from "./oauth";
export interface GoogleProfile {
sub: string;
name: string;
email: string;
picture: string;
}
export default function Google<P extends Record<string, any> = GoogleProfile>(options: OAuthUserConfig<P>): OAuthConfig<P>;
现在,当我使用以下内容时,它确实有效:
import NextAuth from "next-auth"
import GoogleProvider from "next-auth/providers/google"
export default NextAuth({
// Configure one or more authentication providers
providers: [
GoogleProvider({
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
}),
// ...add more providers here
希望有人可以提供帮助,因为我是 javascript 的初学者,而且我真的一直在为此烦恼......
【问题讨论】:
标签: javascript reactjs next.js next-auth