Express -Session - есть ли способ сохранить данные в сеансе вне маршрута ExpressJS? - PullRequest
1 голос
/ 01 апреля 2020

У меня есть паспорт JS обратного вызова, который, когда новый пользователь пытается аутентифицироваться, я не хочу, чтобы данные новых пользователей были сохранены в базе данных, а скорее в express -сессии для доступа позже, это возможно?

В настоящее время мой код:

function facebookAuthenticate(accessToken, refreshToken, profile, done) {
    User.findOne({ facebookID: profile._json.id }, (err, foundUser) => {
        if (foundUser) {
            done(err, foundUser);
        } else {
            global.authenticationID = { facebookID: profile._json.id };
            done(err, null)
        }
    });
}

Но поскольку глобальная переменная не указана пользователем c, она может использоваться только для одной аутентификации за раз.

В идеале я хотел бы, чтобы что-то работало в этом направлении, но, конечно, у меня нет доступа к переменной req вне маршрута:

function facebookAuthenticate(accessToken, refreshToken, profile, done) {
    User.findOne({ facebookID: profile._json.id }, (err, foundUser) => {
        if (foundUser) {
            done(err, foundUser);
        } else {
            req.session.authenticationID = { facebookID: profile._json.id };
            done(err, null)
        }
    });
}

Большое спасибо.

1 Ответ

0 голосов
/ 01 апреля 2020

Это верно, глобальная переменная выходит за пределы области действия вне маршрутов. Очень сложным методом является сохранение данных сеанса в файле на диске и их чтение при необходимости. Но есть некоторые ограничения. Используя jwt auth, вы можете хранить данные в сеансах и файлах cookie браузера.

Простая идея - создать сеанс сначала express,

var sessions    = require("client-sessions");
app.use(sessions({
      cookieName: 'expSessions', // cookie name dictates the key name added to the request object
      secret: 'somesuperSecret', // should be a large unguessable string
      duration: 24 * 60 * 60 * 1000, // how long the session will stay valid in ms
      activeDuration: 1000 * 60 * 5, // if expiresIn < activeDuration, the session will be extended by activeDuration milliseconds
        cookie: {
            path: '/', // cookie will only be sent to requests under '/api'
            maxAge: 60000, // duration of the cookie in milliseconds, defaults to duration above
            ephemeral: false, // when true, cookie expires when the browser closes
            httpOnly: true, // when true, cookie is not accessible from javascript
            secure: true // when true, cookie will only be sent over SSL. use key 'secureProxy' instead if you handle SSL not in your node process
        }
    }));

В качестве альтернативы существует ряд npm пакетов, доступных для обработки сеанса, таких как express -session. Осмотреться. Удачи!

...