• Аутентификация в SPA?

    @dimashin
    Вам уже посоветовали JWT. Отличная вещь, можно хранить какую-то информацию в токене (только доверять ей, конечно нельзя). Я вот только куки не советую использовать, если только в этом нет особой необходимости. Дело в том, что куки браузер хранит в открытом виде в файловой системе, а локал сторедж шифрует. Ну и читать/писать в сторедж намного проще, чем в куки. Не без нюансов, но проще.
    Если коротко - отсылаете данные формы на сервер и получаете токен в ответ. Кладете этот токен в сервис, который заодно его пишет в сторедж. К каждому запросу добавляете токен в хэдер. При первой загрузке приложения проверяете есть ли в сторедже токен и если есть прямо пишете его в сервис.
    Осталось только решить для себя степень защиты.
    В основном можно выделить 3 типа строгости
    1. Токен лежит в сторедже/памяти, но Вы ему никогда не доверяете и прежде чем пустить на любой роут отсылаете его на сервер для проверки. В большинстве случаев этот подход избыточный
    2. Создаете рутовый роут для авторизации и реализуете проверку токена на сервере только на уровне этого роута, все "закрытые" роуты являются дочерними этому роуту и таким образом Вы закрываете все роуты и избавляетесь от избыточных в большинстве случаев запросов. Минусы такого подхода могут проявится при "протухании" токена.
    3. Вы вообще не проверяете токен на сервере. В таком случае для производительности совершенно не важно, закрываете вы только один родительский роут или все. Минусы те же что и для варианта 2, но областей для проявления больше.
    То есть, если пользователь долго оставался неактивным на странице на закртом роуте и токен протух, то пользователь все еще может перейти на любой роут и проверки не будет для варианта 2. Но если пользователь страницу перезагрузит, проверка будет. В третем же случае проверка будет всегда.
    На первый взляд может показаться, что 1 вариант очень даже не избыточный, но в большинстве случаев переход на каждый роут будет сопровождаться с запросом на сервер для подгрузки данных, так что де-факто авторизация все равно будет проиходить. Главное не забывать обрабатывать 401
    Ну и не забудьте так же закрыть роут авторизации для уже авторизированных пользователей такой же проверкой, только наоборот )
    Да, заметьте, тут нет ни слова про vue, потому что это общий принцип применим для всех современных фреймворков.
    Ответ написан
    Комментировать