• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Next() node.js

+1 głos
160 wizyt
pytanie zadane 4 sierpnia 2020 w JavaScript przez poldeeek Mądrala (5,980 p.)
edycja 4 sierpnia 2020 przez poldeeek

Witam, mam pytanie, czy przy takim kodzie, jeśli wywołam middleware accessTokenVerify, to po niej w przypadku dojścia do next() wywoła się router.get('/refresh.... ?

 

const accessTokenVerify = (req, res, next) => {
    if (!req.headers.authorization) return res.status(401).send({ msg: "Access Token is missing." })

    const BEARER = 'Bearer';
    const auth_token = req.headers.authorization.split(' ');
    if (auth_token[0] !== BEARER) return res.status(401).send({ msg: "Access Token is not complete." })

    jwt.verify(auth_token[1], process.env.ACCESS_TOKEN_SECRET, (err) => {
        if (err) return res.status(401).send({ msg: "Access Token is invalid." })
        next();
    })
}

// @route   GET api/auth/refresh
// @desc    Refresh tokens
// @access  Private

router.get('/refresh', (req, res, next) => {
    if (!req.cookies.refreshToken) return res.status(401).send({ msg: "Refresh Token is missing." })
    const BEARER = 'Bearer';
    const refresh_token = req.cookies.refreshToken.split(' ');
    if (refresh_token[0] !== BEARER) return res.status(401).send({ msg: "Refresh Token is not complete." })
    jwt.verify(refresh_token[1], process.env.REFRESH_TOKEN_SECRET, (err, payload) => {
        if (err) return res.status(401).send({ msg: "Refresh Token is invalid." })
        User.findById(payload.sub, async (err, person) => {
            if (!person) return res.status(401).send({ msg: "Person not found." })
            const user_response = {
                id: person._id,
                email: person.email,
                name: person.name,
                surname: person.surname,
                city: person.city,
                birth: person.birth
            }
            const tokens = await generateTokens();
            res.cookie('refreshToken', tokens.refreshToken, { httpOnly: true })
            res.status(200).send({
                accessToken: tokens.accessToken,
                user: user_response
            })
        })
    })
})



module.exports = router;

 

1 odpowiedź

0 głosów
odpowiedź 4 sierpnia 2020 przez poldeeek Mądrala (5,980 p.)

Dobra, głupie pytanie. Nie rozumiałem do końca w jaki sposób to działa i stąd się wzięło. Jednak mam jedno sensowne. Przy wysyłaniu tokenów z klienta do serwera poprzedzam je słowem 'Bearer'.  Czy jeśli odsyłam te tokeny z powrotem - refresh w ciasteczku, a access w jsonie, to też powinienem dodać przed nimi to słowo ?

 

            res.cookie('refreshToken', tokens.refreshToken, { httpOnly: true })
            res.cookie('refreshToken', `Bearer ${tokens.refreshToken}`, { httpOnly: true })

W sensie czy powinienem wysyłać odpowiedź w 1 czy 2 sposób ?

Podobne pytania

0 głosów
2 odpowiedzi 825 wizyt
pytanie zadane 29 marca 2022 w JavaScript przez KubaLaska Początkujący (350 p.)
+2 głosów
2 odpowiedzi 632 wizyt
0 głosów
1 odpowiedź 350 wizyt
pytanie zadane 18 października 2020 w JavaScript przez dkrakowski Nowicjusz (140 p.)

93,732 zapytań

142,669 odpowiedzi

323,287 komentarzy

63,293 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...