Как мне НЕ СОЗДАТЬ сессию в passportjs?

Приведенный ниже код не работает, потому что я не использовал метод сериализации / десериализации из passportjs(www.passportjs.org/docs). Я не хочу использовать метод сериализации / десериализации из passportjs, который автоматически создает сеанс в памяти моего сервера, потому что я не хочу создавать сеанс.

Как я не могу создать сессию и все еще заставить Google oauth работать?

var express = require("express"),
    path = require("path"),
    bodyParser = require("body-parser"),
    morgan = require("morgan"),
    app = express(),

    passport = require("passport"),
    GoogleStrategy = require("passport-google-oauth").OAuth2Strategy;


app.use(passport.initialize());

app.get("/", function(req, res) {
    res.sendFile(__dirname + "/public/main.html");
});


// #1
passport.use(
    new GoogleStrategy({
            clientID: "4267 .apps.googleusercontent.com",
            clientSecret: "34tvd4d32o-",
            callbackURL: "http://localhost:3000/auth/google/callback"
        },
        function(accessToken, refreshToken, profile, done) {
            process.nextTick(function() {
                console.log("profile.id: " + profile.id);
                return done(null, profile.id); // that is being serialized(added in session). if I use this, i'll need to call serialize/deserialize method
                // return done(true);
            });
        }
    )
);

// #1
app.get("/auth/google", passport.authenticate(
    "google", {
        scope: ["profile", "email"],
        session: false
    }
));

// #2
app.get("/auth/google/callback",
    passport.authenticate("google", {
        failureRedirect: "/google_callback_fail",
        successRedirect: "/google_callback_success"
    })
);

app.get("/google_callback_success", isLoggedIn, function(req, res) {
    res.send("google_callback_success \n");
});

function isLoggedIn(req, res, next) {
    console.log("isLoggedIn req.user: " + req.user);

    if (req.isAuthenticated()) {
        console.log("isAuthenticated TRUE");
        return next();
    }
    res.redirect("/notloggedin");
}

app.get("/notloggedin", function(req, res) {
    console.log("req.user: " + req.user);
    res.json("not loggedin");
});

app.get("/google_callback_fail", function(req, res) {
    res.json("the callback after google DID NOT authenticate the user");
});

app.get('/test', function(req, res) {
    res.send('test');
});
app.listen(3000);

Произошла следующая ошибка: Ошибка: не удалось сериализовать пользователя в сеанс. Решением этой ошибки является добавление кода ниже. Тем не менее, это создает сеанс. Я не хочу сессию, так как я использую JWT.

passport.serializeUser(function(user, done) {
    done(null, user.id);
});

// used to deserialize the user
passport.deserializeUser(function(id, done) {
    done(err, user);
});

0 ответов

Другие вопросы по тегам