您好,我正在编写一个 Web 应用程序,Node JS
我正在尝试将我的网站中的用户作为学生或讲师进行身份验证,我为每条路线定义了多个凭据,并且我定义了两个锚点,它们是:但不幸的是/auth/google/student
,/auth/google/instructor
只有第一条路线passport.js
会被调用用于回调。
我该如何解决这个问题并准确地告诉 express 调用哪条路线?
这是我的代码:
app.js
const express = require("express");
const cors = require("cors");
const env = require("./env");
const mysql = require("mysql");
const passport = require("passport");
const studentLoginGoogle = require("./studentLoginGoogle");
const instructorLoginGoogle = require("./instructorLoginGoogle");
const app = express();
app.use(passport.initialize());
app.use(passport.session());
app.use("/auth/google/instructor", instructorLoginGoogle);
app.use("/auth/google/student", studentLoginGoogle);
studentLoginGoogle.js:
const express = require("express");
const mysql = require("mysql");
const env = require("./env");
const cors = require("cors");
const passport = require("passport");
const GoogleStrategy = require("passport-google-oauth").OAuth2Strategy;
const FacebookStrategy = require("passport-facebook");
const app = express();
env.get();
const router = express.Router();
app.use(cors());
let userProfile;
passport.serializeUser(function (user, cb) {
cb(null, user);
});
passport.deserializeUser(function (obj, cb) {
cb(null, obj);
});
//authentication with google
passport.use(
new GoogleStrategy(
{
clientID: process.env.GOOGLE_CLIENT_ID_STUDENT,
clientSecret: process.env.GOOGLE_CLIENT_SECRET_STUDENT,
callbackURL: "http://localhost:3001/auth/google/student/callback",
},
function (accessToken, refreshToken, profile, done) {
userProfile = profile;
return done(null, userProfile);
}
)
);
router.get(
"/",
passport.authenticate("google", { scope: ["profile", "email"] })
);
router.get(
"/callback",
passport.authenticate("google", { failureRedirect: "/" }),
function (req, res) {
console.log(userProfile);
let sql = `SELECT user_name FROM students WHERE email="${userProfile.emails[0].value}"`;
con.query(sql, (err, result) => {
if (err) console.log(err);
if (result.length !== 0) {
res.send("you are validated as student ...");
} else {
let sql2 = `INSERT INTO students (first_name,last_name,email,user_name) VALUES ("${userProfile.name.givenName}","${userProfile.name.familyName}","${userProfile.emails[0].value}","${userProfile.displayName}")`;
con.query(sql2, (err, result) => {
if (err) console.log(err);
res.send("you are registered as student for this app");
});
}
});
}
);
module.exports = router;
instructorLoginGoogle.js:
const express = require("express");
const mysql = require("mysql");
const env = require("./env");
const cors = require("cors");
const passport = require("passport");
const GoogleStrategy = require("passport-google-oauth").OAuth2Strategy;
const FacebookStrategy = require("passport-facebook");
const app = express();
env.get();
const router = express.Router();
app.use(cors());
let userProfile;
passport.serializeUser(function (user, cb) {
cb(null, user);
});
passport.deserializeUser(function (obj, cb) {
cb(null, obj);
});
//authentication with google
passport.use(
new GoogleStrategy(
{
clientID: process.env.GOOGLE_CLIENT_ID_INSTRUCTOR,
clientSecret: process.env.GOOGLE_CLIENT_SECRET_INSTRUCTOR,
callbackURL: "http://localhost:3001/auth/google/instructor/callback",
},
function (accessToken, refreshToken, profile, done) {
userProfile = profile;
return done(null, userProfile);
}
)
);
router.get(
"/",
passport.authenticate("google", { scope: ["profile", "email"] })
);
router.get(
"/callback",
passport.authenticate("google", { failureRedirect: "/" }),
function (req, res) {
let sql = `SELECT user_name FROM instructors WHERE email="${userProfile.emails[0].value}"`;
con.query(sql, (err, result) => {
if (err) console.log(err);
if (result.length !== 0) {
res.send("you are validated as instructor ...");
} else {
let sql2 = `INSERT INTO instructors (first_name,last_name,email,user_name,gender,year_of_birth) VALUES ("${userProfile.name.givenName}","${userProfile.name.familyName}","${userProfile.emails[0].value}","${userProfile.displayName}","male",1990)`;
con.query(sql2, (err, result) => {
if (err) console.log(err);
res.send("you are registered as instructor for this app");
});
}
});
}
);
module.exports = router;