错误:runtime:extensions~request: request url为空Google OAuth wit



我试图让Google OAuth与我的节点JS后端一起工作,我使用Passport JS与Google策略以及猫鼬查找或创建包来查找或创建用户。

我能够完成与谷歌浏览器弹出请求访问令牌与邮差时的登录。

回调URL为:http://localhost:3000/subscribers/google/callback

验证URL为:http://localhost:3000/subscribers/google

剩余的细节正在通过护照传递。

我的订阅者路由中的顶部样板代码:

const express = require("express");
const router = express.Router();
const Subscriber = require("../models/subscriber");
const passport = require("passport");
const session = require("express-session");
const Order = require("../models/order");
const GoogleStrategy = require('passport-google-oauth20').Strategy;

router.use(session({
secret: "foodsecrets",
resave: false,
saveUninitialized: false
}));
router.use(passport.initialize());
router.use(passport.session());
passport.use(Subscriber.createStrategy());
passport.serializeUser(Subscriber.serializeUser());
passport.deserializeUser(Subscriber.deserializeUser());

passport.use(new GoogleStrategy({
clientID: "330178790432-ro0cr35k37f7kq4ln4pdq6dqdpqqtri6.apps.googleusercontent.com",
clientSecret: "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",
callbackURL: "http://localhost:3000/subscribers/google/callback",
userProfileURL: "https://www.googleapis.com/oauth2/v3/userinfo"
},
function (accessToken, refreshToken, profile, cb) {
Subscriber.findOrCreate({
googleId: profile.id
}, function (err, user) {
return cb(err, user);
});
}
));

初始Auth和Callback路由:

router.get("/google", passport.authenticate("google", {
scope: ["profile"]
}));
router.get(
"/google/callback",
passport.authenticate("google", {
successRedirect: "http://localhost:3001",
failureRedirect: "/login/failed",
})
);

用户模式:

const mongoose = require("mongoose")
const passportLocalMongoose = require("passport-local-mongoose");
const findOrCreate = require('mongoose-findorcreate')


const cartSchema = new mongoose.Schema({
name: String,
price: Number,
description: String
})
const favouritesSchema = new mongoose.Schema({
favouritemeals: {
type: Array
},
favouriteresturants: {
type: Array
}
})
const pendingItemsSchema = new mongoose.Schema({
name: String,
price: Number,
description: String
})
const pendingOrderSchema = new mongoose.Schema({
userID: {
type: String,
required: true
},
total: {
type: Number,
required: true
},
items: [pendingItemsSchema],
removeItem: {
type: String
},
orderData: {
type: Date,
required: true,
default: Date.now
},
confirmed: {
type: Boolean,
required: true
}
})
const subscriberSchema = new mongoose.Schema({

username: {
type: String,
required: true
},
email: {
type: String,
},
subscribeData: {
type: Date,
required: true,
default: Date.now
},
orderHistory: {
type: Array,
},
favourites: {
favouritesSchema
},
cart: [cartSchema],
login: {
type: String,
},
pendingOrder: [pendingOrderSchema]
})

subscriberSchema.plugin(passportLocalMongoose)
subscriberSchema.plugin(findOrCreate)
module.exports = mongoose.model("subscriber", subscriberSchema)

当我从邮差发送访问令牌请求时,我成功登录并收到以下错误以及以下详细信息

控制台错误信息:

Error: runtime:extensions~request: request url is empty

请求细节:

POST
Error: runtime:extensions~request: request url is empty
Request Headers
Content-Type: application/x-www-form-urlencoded
Authorization: Basic Og==
Request Body
grant_type: "authorization_code"
code: "4/0AX4XfWjomz86Qs18ShaqLeJmQO13nTOzaz92dONTQgRUNQsuFj6ipIS6D5KFgjiWQtFkVg"
redirect_uri: "http://localhost:3000/subscribers/google/callback"
client_id: ""

我想我的回调路线有问题,但我不是很确定。这是我第一次设置OAuth,所以有点笨,任何帮助都会非常感激。

就像你说的,url是错误的。

使用http://localhost:3000/subscribers/google/callback(or)

passport.use(new GoogleStrategy({
clientID: "330178790432-ro0cr35k37f7kq4ln4pdq6dqdpqqtri6.apps.googleusercontent.com",
clientSecret: "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",
callbackURL: "http://localhost:3000/subscribers/google/callback", // fix this url
userProfileURL: "https://www.googleapis.com/oauth2/v3/userinfo"
},

相关内容

最新更新