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

Informacje z serwera w Cookie'es

Object Storage Arubacloud
0 głosów
113 wizyt
pytanie zadane 27 lipca 2020 w JavaScript przez poldeeek Mądrala (5,980 p.)
Zacząłem pisać aplikację typu social media z użyciem React i Node.js. Proces autoryzacji i autentykacji chcę zrobić za pomocą JWT. Z tego co wyczytałem to dany token najlepiej przechowywać w ciasteczkach, i przy każdym zapytaniu do serwera wysyłać go do serwera. I teraz moje pytanie jak się obnosić z podstawowymi danymi użytkownika (imię, nazwisko, zdjęcie profilwe, itd.). Ponieważ chciałbym mieć zawsze do nich dostęp zastanawiam się czy dobrym pomysłem, aby te informacje poza Redux'em również przechowywać w ciasteczkach, ponieważ boję się, że przy odświeżaniu strony stan Redux'a będzie się czyścił i strona się wysypie.

2 odpowiedzi

+1 głos
odpowiedź 28 lipca 2020 przez Aisekai Nałogowiec (42,190 p.)
wybrane 28 lipca 2020 przez poldeeek
 
Najlepsza

 Z tego co wyczytałem to dany token najlepiej przechowywać w ciasteczkach, i przy każdym zapytaniu do serwera wysyłać go do serwera.

Nie. Najlepiej taki token trzymać w pamięci (jakiejś zmiennej w Jsie). Do tego posługujesz się refresh tokenem trzymanym w Cookie Http Only + Secured.

aby te informacje poza Redux'em również przechowywać w ciasteczkach, ponieważ boję się, że przy odświeżaniu strony stan Redux'a będzie się czyścił i strona się wysypie.

Nic takiego w ciasteczkach. Jeżeli już coś musisz przechowywać (i nie są to dane wrażliwe) to albo session storage albo local storage. Fakt - po odświeżeniu, stan zapisany w Reduxie zostanie zresetowany ale nie przeszkadza to w tym, żeby Komponent na nowo wysłał request do serwera i pobrał odpowiednie dane. Dane takie jak imie, nazwisko itd bez problemu możesz trzymać w Reduxie i napisać logikę, odpowiedzialną za pobranie danych po odświeżeniu strony.

komentarz 28 lipca 2020 przez poldeeek Mądrala (5,980 p.)

@Aisekai, Rozumiem sens tego rozwiązania, ale nie za bardzo jak to działa. Czy dobrze myślę ? Wysyłam accessToken i w przypadku jeśli coś z nim jest nie tak, odsyłam do klienta wiadomość, że token jest nieprawidłowy. Wtedy klient wysyła prośbę o nowy accessToken, przesyłając refreshToken. Na jego podstawie tworzę nowy accessToken i odsyłam do klienta. Wtedy klient ponawia request, który wysłał na początku.

1
komentarz 28 lipca 2020 przez Aisekai Nałogowiec (42,190 p.)
Tutaj masz wytłumaczone:

https://youtu.be/iD49_NIQ-R4
komentarz 1 sierpnia 2020 przez poldeeek Mądrala (5,980 p.)

Stworzyłem coś takiego, jest to póki co tylko rejestracje, ale logowanie będzie działać w sumie tak samo. Prosiłbym tylko o ocenę, czy napisane w porządku, czy może coś by trzeba było poprawić.

 

require('dotenv').config();
const express = require("express");
const bcrypt = require("bcrypt");
const jwt = require("jsonwebtoken");

const router = express.Router();

// User model 
const User = require("../../models/User");

// @route   POST api/users
// @desc    Register new user
// @access  Public

router.post('/register', async (req, res) => {
    const { name, surname, email, password, city, birth } = req.body;

    // Validation
    if (!name || !surname || !email || !password || !city || !birth) {
        return res.status(400).json({ msg: "Please enter all fields." });
    }

    // Check for existing user
    User.findOne({ email })
        .then(async user => {
            if (user) return res.status(400).send({ msg: "User already exist." })

            try {
                const hashedPassword = await bcrypt.hash(password, 10);
                const newUser = new User({
                    email,
                    password: hashedPassword,
                    name,
                    surname,
                    city,
                    birth
                })
                newUser.save()
                    .then(async user => {
                        const user_response = {
                            id: user._id,
                            email: user.email,
                            name: user.name,
                            surname: user.surname,
                            city: user.city,
                            birth: user.birth
                        }
                        const accessToken = await jwt.sign(
                            { user_response },
                            process.env.ACCESS_TOKEN_SECRET,
                            { expiresIn: '15m' }
                        )
                        const refreshToken = await jwt.sign(
                            { user_response },
                            process.env.REFRESH_TOKEN_SECRET,
                            { expiresIn: '15d' }
                        )
                        res.cookie('refreshToken', refreshToken, { httpOnly: true })
                        res.status(200).send({
                            msg: "User created.",
                            accessToken,
                            user_response
                        })
                    }).catch(err => {
                        res.status(500).send({ msg: "Database error" })
                    })
            } catch (err) {
                console.log(err)
                res.status(500).send({ msg: "Creating user error" })
            }
        })
})

module.exports = router;

 

+1 głos
odpowiedź 28 lipca 2020 przez spamator12 Nałogowiec (28,230 p.)

Polecam sprawdzone w boju ciastka. Przypominajac, ze w ciachu trzymasz tylko jakis indentyfikator a nie jakiekolwiek wrazliwe dane (identyfikatorem wiazesz te wrazliwe dane z userem). Zdecydowanie sesja (express-session - pamietaj, ze MemoryStore sie NIE nadaje na produkcje, unikaj local storage) + redis i jak pisal @Aisekai Http Only + Secured.

Podobne pytania

+1 głos
2 odpowiedzi 200 wizyt
pytanie zadane 30 lipca 2016 w Sieci komputerowe, internet przez Paweł123 Nałogowiec (33,500 p.)
0 głosów
2 odpowiedzi 127 wizyt
pytanie zadane 4 sierpnia 2020 w PHP przez Bakkit Dyskutant (7,600 p.)
0 głosów
1 odpowiedź 413 wizyt

92,573 zapytań

141,423 odpowiedzi

319,648 komentarzy

61,959 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...