我正在嘗試使用 設定我的用戶身份驗證路由,passport
并且GoogleStrategy
在配置它時遇到了一些問題。我抓了一些代碼片段至少讓它運行起來。
passport.js
const dotenv = require("dotenv");
const passport = require("passport");
const GoogleStrategy = require("passport-google-oauth20").Strategy;
require(dotenv).config();
passport.use(
new GoogleStrategy(
{
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: "http://localhost:8000/users/auth/google",
scope: ["profile", "email"],
},
function (request, accessToken, refreshToken, profile, done) {
return done(null, profile);
}
)
);
passport.serializeUser((user, done) => {
done(null, user);
});
passport.deserializeUser((user, done) => {
done(null, user);
});
這是我的主server.js
檔案:
const express = require("express");
const app = express();
const passport = require("passport");
require("./config/passport");
const session = require("express-session");
require("dotenv").config();
const PORT = process.env.PORT || 8000;
app.use(session({ secret: "cats", resave: false, saveUninitialized: true }));
app.use(passport.initialize());
app.use(passport.session());
const tickerRoutes = require("./routes/tickers");
app.get("/", (req, res) => {
res.send("greetings!");
});
app.get(
"/users/signin",
passport.authenticate("google", {
successRedirect: "http://localhost:8000/users/success",
failureRedirect: "/login/failed",
scope: ["profile", "email"],
})
);
app.use("/tickers", tickerRoutes);
app.use("/users", userRoutes);
app.listen(PORT, () => {
console.log(`App is listening on port: ${PORT}`);
});
但是,在運行我的服務器時出現以下錯誤:
node:internal/validators:119
throw new ERR_INVALID_ARG_TYPE(name, 'string', value);
^
TypeError [ERR_INVALID_ARG_TYPE]: The "id" argument must be of type string. Received an instance of Object
at new NodeError (node:internal/errors:371:5)
at validateString (node:internal/validators:119:11)
at Module.require (node:internal/modules/cjs/loader:998:3)
at require (node:internal/modules/cjs/helpers:102:18)
at Object.<anonymous> (/Users/carlosgrijalva/Documents/coinview/backend/config/passport.js:4:1)
at Module._compile (node:internal/modules/cjs/loader:1101:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Module.require (node:internal/modules/cjs/loader:1005:19) {
code: 'ERR_INVALID_ARG_TYPE'
}
我已經仔細檢查了我的env
變數,它們似乎是有效的,所以我不確定問題是什么。
uj5u.com熱心網友回復:
您的錯誤來自這里:
const dotenv = require("dotenv"); // returns object
const passport = require("passport");
const GoogleStrategy = require("passport-google-oauth20").Strategy;
require(dotenv).config();//you have used an object here instead of a string
首先,您需要dotenv
模塊此操作回傳物件,然后您在require()
函式中使用此物件。此函式需要一個字串,但您添加了一個物件。
需要(id)#
- id
<string>
模塊名稱或路徑- 回傳:
<any>
匯出的模塊內容
相關檔案
您可以按如下方式修復它:
const passport = require("passport");
const GoogleStrategy = require("passport-google-oauth20").Strategy;
require("dotenv").config()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/473942.html
標籤:节点.js 表示 护照.js 护照-谷歌-oauth