• 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

VPS Starter Arubacloud
0 głosów
102 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 193 wizyt
pytanie zadane 30 lipca 2016 w Sieci komputerowe, internet przez Paweł123 Nałogowiec (33,500 p.)
0 głosów
2 odpowiedzi 122 wizyt
pytanie zadane 4 sierpnia 2020 w PHP przez Bakkit Dyskutant (7,600 p.)
0 głosów
1 odpowiedź 399 wizyt

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...