
Станислав
27.09.2018
16:08:32
и есть ли хорошо если я выставляю в отдельных случаях “слать/не слать” токен?

Efim
27.09.2018
16:08:38
Что значит на валидность?

Станислав
27.09.2018
16:08:50
ну может он истек
и я по нему не могу получать данные

Google

Efim
27.09.2018
16:09:12
А клиент тут при чем?

Станислав
27.09.2018
16:09:28
дык я этот токен во втором запросе шлю и тот отвечает 401

Efim
27.09.2018
16:09:34
Сервер должен вернуть 401 или другую ошибку если токена нет
Или он истек

Станислав
27.09.2018
16:09:46
он и отвечает

Efim
27.09.2018
16:10:21
Ну вот, после того как ответил и делай логику которую хотел делать если токен не валиден

Станислав
27.09.2018
16:10:40
я этот токен отправляю с каждым запросом, это ок или не ок? Если да, то мне сервер отвечает 401 на то, что можно получить без токена

Valeriy
27.09.2018
16:11:10

Станислав
27.09.2018
16:11:18
/items?token = объекты конкретно для юзера
/items = просто список объектов
/items?invalidToken = 401 еррор
токен, конечно же, не шлется в гет параметре))

Efim
27.09.2018
16:11:38
По моему у тебя какой-то оверхед с токеном

Valeriy
27.09.2018
16:11:59

Efim
27.09.2018
16:12:15
Ты не должен парсить куки из жса, более того куки должны быть httponly

Google

Станислав
27.09.2018
16:12:19
?

Efim
27.09.2018
16:12:42
Для банального кейса с авторизацией
Вместо этого твой аякс должен быть с включенными кредешненами

Valeriy
27.09.2018
16:13:28
для полного фарша и чувства сухости надо Bearer token в Authorized, jwt token в каком нить заголовке, в урле продублировать и с куками еще один

Станислав
27.09.2018
16:13:31

Valeriy
27.09.2018
16:13:53
при чем один куки будет бакенд выставлять другую куку фронт :)

Станислав
27.09.2018
16:14:09
? блин)

Efim
27.09.2018
16:14:12
Твой cookie это уже распарсенный куки ?

Станислав
27.09.2018
16:14:23
яясно, значит гомно сделал))
если мне после логина сервер отправляет токен вне кукисов, где мне его хранить?

Valeriy
27.09.2018
16:15:28

Efim
27.09.2018
16:15:53
В таком случае в сторе, но у тебя должна быть причина отправлять его вне кук
Есть бест практикс, выдумывать уже давно ничего не нужно)

Станислав
27.09.2018
16:16:29
понял)

Valeriy
27.09.2018
16:16:51

Станислав
27.09.2018
16:17:05
хмм значит бэк должен в куках присылать, ок, допустим, он присылает
что происходит если у меня авторизация через Authorization: Token blablabla?
чувствую себя идиотом ))

Valeriy
27.09.2018
16:20:23
ты шлешь на сервер логин и пароль, в ответ получаешь токен
сохраняешь его в локал сторадж
пихаешь в заголовок Autorization: Bearer {token}

Google

Valeriy
27.09.2018
16:21:24
при каждом запросе на сервер
и получаешь удовольствие

Станислав
27.09.2018
16:21:59
хехе не-а))
если вместо куков юзать локал сторейдж (что я и делал до этого), в целом проблема остается
при входе на сайт выполняются 2 запроса
/api/profiles/me
/api/items
и вот во втором я получаю еррор не дожидаясь первого
если токен не валидный

Valeriy
27.09.2018
16:23:16
ну это зависит от схемы авторизации на вашем бакенде

Станислав
27.09.2018
16:23:43
бэк в случае неверного токена отдает 401
как мне сделать так, чтобы все остальные запросы ждали тот, который получит данные юзера тем самым проверив токен, а потом уже остальное, так как первый если получает ошибку, то тупо затирает и в след. запросах токена не будет

Konstantin
27.09.2018
16:27:43

Valeriy
27.09.2018
16:27:54

Станислав
27.09.2018
16:28:42
userActions.get()
.catch(error => {
cookie.remove(config.tokenCookieName);
})
.then(response => {
ReactDOM.render(...)
});
???
мне казалось это дикий костыль)

Valeriy
27.09.2018
16:29:02
ёпрст
ты даже не представляешь себе насколько :))))
а форма логина юзера то где?

Станислав
27.09.2018
16:29:40
если че, я это даже не пробовал юзать )))

Google

Станислав
27.09.2018
16:29:46
а то подумают совсем делетант ))

Valeriy
27.09.2018
16:31:24
сек
просто в твоем примере, если сервер тебя с токеном жестко обламал, то ты даже окошко логина не покажешь юзеру

Станислав
27.09.2018
16:31:32
там немного разбито все,
process(response) {
cookie.save(config.tokenCookieName, response.body.token, {
path: '/'
});
modalActions.close(modalActions.types.LOGIN);
}
вот это выполняется после того, как успешно все закончилось
не совсем понял если честно

Valeriy
27.09.2018
16:32:06
ты се1йчас код бакенда показываешь что ли?

Станислав
27.09.2018
16:32:11
вся проблема при входе на сайт)

Admin
ERROR: S client not available

Станислав
27.09.2018
16:32:32
а в catch он обрабатывает ошибки и записывает в стейт нужные данные, думаю, это не интересно
чета я сам запутался…
и так, еще раз ))
проблема:
1) юзер заходит на сайт
2) у юзера в куках/localStorage хранится истекший токен
3) выполняется асинхронный запрос на /api/profiles/me
4) выполняется асинхронный запрос на /api/items
5) к этому времени обрабатываю респонс от /api/profiles/me и стираю токен из хранилища
6) получаю 401 ошибку от /api/items
нужно сделать так, чтобы в 4 шаге не отправлялся токен, а 5 шаг переместился на место 4.

Valeriy
27.09.2018
16:36:46
мне кажется, чтобы люди не писали такой код, надо запрещать программистам работать в дни когда магнитные бури сверепствуют :))

Станислав
27.09.2018
16:37:26

Valeriy
27.09.2018
16:37:57
ты должен первым делом определиться что может видеть неавторизованный юзер
если не должен видеть ничего кроме окна логина, то это все упрощает

Станислав
27.09.2018
16:38:59
/api/items может выполняться как с токеном, так и без, при этом получать разный контент, но с инвалидным токеном он отдает 401
анонимный юзер может видеть половину всго сайта)

Valeriy
27.09.2018
16:39:29
вот у меня в приложениях гость ничего не может
поэтому до выяснения того кто он гость или реальный пацан я кручу сплэш скрин для него
в этот момент веб разбирается с бакендом что там с токеном

Станислав
27.09.2018
16:39:42

Valeriy
27.09.2018
16:40:19

Станислав
27.09.2018
16:40:20
а у меня есть список товаров, которые видит анонимный юзер и авторизованный...

Google

Станислав
27.09.2018
16:40:35
?
я все видел
не поможет )))

Mike
27.09.2018
16:40:58

Станислав
27.09.2018
16:41:21

Mike
27.09.2018
16:41:21
поэтому к моменту запуска твоего приложения ты уже будешь знать про токен все

Станислав
27.09.2018
16:42:24

Mike
27.09.2018
16:42:30
ну можешь по-другому

Станислав
27.09.2018
16:42:36
userActions.get()
.catch(error => {
cookie.remove(config.tokenCookieName);
})
.then(response => {
ReactDOM.render(...)
});
?

Valeriy
27.09.2018
16:42:58
так делают студенты первокурсники

Mike
27.09.2018
16:43:24
можешь положить переменную "токен проверен" в свой любимый стейт менеджер, потом в аппе сделать запрос, который потом поменяет эту переменную, а пока не поменяли — прелоудер

Artyom
27.09.2018
16:43:49

Valeriy
27.09.2018
16:44:02

Andrew
27.09.2018
16:44:10

Станислав
27.09.2018
16:44:17
?

Mike
27.09.2018
16:44:19