Передача и обновление данных по приложению node-express - PullRequest
0 голосов
/ 31 декабря 2018

Как я могу передавать и обновлять данные по приложению node-express без использования БД.

Итак, я использую паспорт для аутентификации (рассмотрим это в src / google-passport.js ),

passport.use(new GoogleStrategy({
    clientID: process.env.GOOGLE_CLIENT_ID,
    clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    callbackURL:  process.env.GOOGLE_CALLBACK_URL,
    userProfileURL: 'https://www.googleapis.com/oauth2/v3/userinfo',
    accessType: 'offline'
  }, (accessToken, refreshToken, params, profile, cb) => { 
        let profileSort = extractProfile(profile)
         mongooeHelperFunction.findUserByEmail(profileSort.email).then(response => {
           if (!response) {
            mongooeHelperFunction.createNewUser(profileSort)
            .then(res => {
               let newRes = {...res._doc}
                newRes["accessToken"] = accessToken
                cb(null, newRes)
            })
            .catch(error => {  throw error  })
           } else {
                let newRes = {...response._doc}
                newRes["accessToken"] = accessToken
                cb(null, newRes)
           }
        })
        .catch(error => {  throw error  })
    }
))

Из паспорта я получаю токен доступа и токен обновления .Обычно токен доступа Google действителен в течение часа.

Поэтому я хочу сохранить время, когда я получу свой токен доступа, и если срок действия моего токена истек, я хочу использовать токен обновления, чтобы получить новый токен доступа, а затем обновить время после того, как новый токен доступа будетгенерироваться.

рассмотрим маршрут API

app.get("/something", isTokenValid, (req, res) => {

, где isTokenValid - функция промежуточного программного обеспечения, и внутри этой функции у меня может быть , когда был создан мой паспортный токен, а затем я мог бысравните это с текущим временем.

Дополнительно, если срок действия токена истек, у меня есть функция, которая отправляет токен обновления для получения нового токена доступа и обновления предыдущих данных / времени доступа к новой дате / времени

Вопрос: как я могу передавать и обновлять данные в приложении-экспрессе

1 Ответ

0 голосов
/ 31 декабря 2018

Создать объект контекста

Как и в вашем примере, мы добавляем другое промежуточное ПО, которое создает контекст для конвейера промежуточного ПО:

const initCtx = (req,res,next) => {
    req.ctx = {};
    next();
}

Затем в объявлении промежуточного ПО:

    app.get("/something", [initCtx, isTokenValid], (req, res) => {

Обычно это можно сделать как первое промежуточное ПО в конвейере, в верхней части ваших объявлений промежуточного ПО во всем приложении:

const initCtx = (req,res,next) => {
    req.ctx = {};
    next();
}
app.use(initCtx);

Передача значения в ctx

В isTokenValid промежуточном ПОгде вы извлекаете accessToken и время его истечения, в конце вы можете пройти его.Если срок действия маркера доступа равен tokenExpiration:

req.ctx.tokenExpiration = tokenExpiration;

Использование значения

В промежуточном программном обеспечении, которое заботится об обновлении токенов:

 app.get("/something", [initCtx, isTokenValid], (req, res) => {
       const tokenExpiration = req.ctx.tokenExpiration; // you have token expiration time that you can compare and apply required logic in refreshing token middleware

Оригинальный ответ и объяснение

Вы можете назначить свойство ctx (объект контекста) для выражения req объекта и передавать через него информацию между промежуточными программами.Затем вы сможете проверить определенные ключи в этом объекте в промежуточном ПО нижестоящего уровня и применить необходимую логику.

ctx объект может быть создан первыми промежуточными программами в конвейере (этот часто также проверяет requestId из заголовков и присваивает его также ctx, так что все действия в контексте одного и того же запроса могут бытьлегко отслеживается)

Если токен действителен, вы можете назначить req.ctx.tokenExpiration, а затем в другом промежуточном программном обеспечении проверить, нужно ли его обновлять.

Кстати, фреймворки Koa и Loopback работают с объектом ctx из коробки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...