Passport.js Spotify 策略 - User.Save() 不是函数
Passport.js Spotify Strategy - User.Save() is not a function
我试图在我的数据库中保存访问权限和刷新令牌,然后为该用户进行 API 调用。对于 Passport-js-spotify、JMPerez Passport Spotify 示例和 Spotify API 文档,我已经尽可能地按照在线示例进行操作,但我仍然收到一条错误消息,提示 User.save() 不是函数.如果我只找到一个,我就可以从数据库中检索用户信息。此外,我感觉我的回调设置也不正确。有点转过身来。我将不胜感激解决问题的任何帮助。我在下面包含了我的代码。如果您需要任何其他信息,请告诉我。
const express = require("express");
const router = express.Router();
const SpotifyStrategy = require("passport-spotify").Strategy;
const passport = require("passport");
const SpotifyUser = require("../Models/UserSpotify");
var spotifyID;
passport.use(
new SpotifyStrategy({
clientID: "84f1c0xxxx29b95xxx0b0fdxxx42f5ce",
clientSecret: "0b0xxx5944ad8bxx07ab4xxxx",
callbackURL: "http://localhost:3001/spotify/callback",
}, function (accessToken, refreshToken, expires_in, profile, done) {
spotifyID = profile.id
displayName = profile.displayName
email = profile._json.email
profileURL = profile.profileUrl
accessToken = accessToken
refreshToken = refreshToken
country = profile.country
accountType = profile.product
console.log(spotifyID)
process.nextTick(function () {
SpotifyUser.findOne({
'spotifyID': spotifyID
}).then((currentUser) => {
if (!currentUser) {
const User = new SpotifyUser == ({
spotifyID: spotifyID,
displayName: displayName,
email: email,
profileURL: profileURL,
accessToken: accessToken,
refreshToken: refreshToken,
country: country,
accountType: accountType
})
User.save(function (err) {
if (err) console.log(err);
return done(err, user);
})
} else {
console.log(currentUser);
}
})
})
router.get(
"/login",
passport.authenticate(
"spotify", {
scope: ["user-read-email", "user-read-private"],
showDialog: true,
}
),
function (req, res) {
console.log(res.accessToken)
console.log(res.refreshToken)
}
);
router.get(
"/callback",
passport.authenticate("spotify", {
failureRedirect: "/login"
}),
function (req, res) {
// Successful authentication, redirect home.
res.redirect("/success");
}
);
router.get("/success", passport.authenticate('spotify'), (req, res) => {
res.send("success")
});
我在代码中看到的一个显而易见的事情是
const User = new SpotifyUser == ({
spotifyID: spotifyID,
displayName: displayName,
email: email,
profileURL: profileURL,
accessToken: accessToken,
refreshToken: refreshToken,
country: country,
accountType: accountType
})
删除 ==
const User = new SpotifyUser({
spotifyID: spotifyID,
displayName: displayName,
email: email,
profileURL: profileURL,
accessToken: accessToken,
refreshToken: refreshToken,
country: country,
accountType: accountType
})
我试图在我的数据库中保存访问权限和刷新令牌,然后为该用户进行 API 调用。对于 Passport-js-spotify、JMPerez Passport Spotify 示例和 Spotify API 文档,我已经尽可能地按照在线示例进行操作,但我仍然收到一条错误消息,提示 User.save() 不是函数.如果我只找到一个,我就可以从数据库中检索用户信息。此外,我感觉我的回调设置也不正确。有点转过身来。我将不胜感激解决问题的任何帮助。我在下面包含了我的代码。如果您需要任何其他信息,请告诉我。
const express = require("express");
const router = express.Router();
const SpotifyStrategy = require("passport-spotify").Strategy;
const passport = require("passport");
const SpotifyUser = require("../Models/UserSpotify");
var spotifyID;
passport.use(
new SpotifyStrategy({
clientID: "84f1c0xxxx29b95xxx0b0fdxxx42f5ce",
clientSecret: "0b0xxx5944ad8bxx07ab4xxxx",
callbackURL: "http://localhost:3001/spotify/callback",
}, function (accessToken, refreshToken, expires_in, profile, done) {
spotifyID = profile.id
displayName = profile.displayName
email = profile._json.email
profileURL = profile.profileUrl
accessToken = accessToken
refreshToken = refreshToken
country = profile.country
accountType = profile.product
console.log(spotifyID)
process.nextTick(function () {
SpotifyUser.findOne({
'spotifyID': spotifyID
}).then((currentUser) => {
if (!currentUser) {
const User = new SpotifyUser == ({
spotifyID: spotifyID,
displayName: displayName,
email: email,
profileURL: profileURL,
accessToken: accessToken,
refreshToken: refreshToken,
country: country,
accountType: accountType
})
User.save(function (err) {
if (err) console.log(err);
return done(err, user);
})
} else {
console.log(currentUser);
}
})
})
router.get(
"/login",
passport.authenticate(
"spotify", {
scope: ["user-read-email", "user-read-private"],
showDialog: true,
}
),
function (req, res) {
console.log(res.accessToken)
console.log(res.refreshToken)
}
);
router.get(
"/callback",
passport.authenticate("spotify", {
failureRedirect: "/login"
}),
function (req, res) {
// Successful authentication, redirect home.
res.redirect("/success");
}
);
router.get("/success", passport.authenticate('spotify'), (req, res) => {
res.send("success")
});
我在代码中看到的一个显而易见的事情是
const User = new SpotifyUser == ({
spotifyID: spotifyID,
displayName: displayName,
email: email,
profileURL: profileURL,
accessToken: accessToken,
refreshToken: refreshToken,
country: country,
accountType: accountType
})
删除 ==
const User = new SpotifyUser({
spotifyID: spotifyID,
displayName: displayName,
email: email,
profileURL: profileURL,
accessToken: accessToken,
refreshToken: refreshToken,
country: country,
accountType: accountType
})