Size: a a a

GraphQL — русскоговорящее сообщество

2017 August 09

OR

Oleg R. in GraphQL — русскоговорящее сообщество
я может тебя не так понял, думал ты хочешь на старте всегда делать мутацию "создай токен"
источник

S

Sergey in GraphQL — русскоговорящее сообщество
Nikita Stenin
А разве localStorage доступен не на всех вкладках? Просто перед каждым запросом добавлять токен в заголовок. На второй вкладке уйдёт мутация уже с токеном. В этом случае просто не создавать новый, а отправить существующий. Или вообще выбросить ошибку. Разве не так? Отдельные маршруты для логина в этом случае могут иметь такую же проблему вроде как
да, такой подход и предалгают relay и apollo  и проблем с двумя вкладками тут не будет. Но вообще это нормальная практика при каждом запросе из localStorage тащить токен, может его где нибудь в оперативной памяти хранить, а в нее загружать из localStorage при старте приложения?
источник

NS

Nikita Stenin in GraphQL — русскоговорящее сообщество
Oleg R.
я может тебя не так понял, думал ты хочешь на старте всегда делать мутацию "создай токен"
Я имел в виду на странице с формой входа отправлять мутацию)
источник

OR

Oleg R. in GraphQL — русскоговорящее сообщество
Sergey
а где у apollo отлавливать 401?
networkInterface.useAfter([
 {
   applyAfterware({ response }, next) {
     if (response.status === 401) {
       store.dispatch(catch401());
     } else {
       next();
     }
   },
 },
]);

вот в моем случае 401 на сервере бросается первой мидлварой в экспрессе, которая отвечает за авторизацию/аутентификацию и до графкюэлевских обработчиков дело даже не доходит на серваке
а на клиенте словить вот так можно
источник

NS

Nikita Stenin in GraphQL — русскоговорящее сообщество
Sergey
да, такой подход и предалгают relay и apollo  и проблем с двумя вкладками тут не будет. Но вообще это нормальная практика при каждом запросе из localStorage тащить токен, может его где нибудь в оперативной памяти хранить, а в нее загружать из localStorage при старте приложения?
Если я правильно понимаю, то в таком случае при устаревшем токене новые данные просто не вернуться. Тогда либо показываем форму входа, либо если есть долгоживущий рефреш токен, то отправляем запрос на обновление аксесс токена. И потом снова шлем запрос с обновлённым токеном (где-то на хабре что-то подобное было описано)
источник

S

Sergey in GraphQL — русскоговорящее сообщество
Oleg R.
networkInterface.useAfter([
 {
   applyAfterware({ response }, next) {
     if (response.status === 401) {
       store.dispatch(catch401());
     } else {
       next();
     }
   },
 },
]);

вот в моем случае 401 на сервере бросается первой мидлварой в экспрессе, которая отвечает за авторизацию/аутентификацию и до графкюэлевских обработчиков дело даже не доходит на серваке
а на клиенте словить вот так можно
да, это работает. Спасибо
источник

OR

Oleg R. in GraphQL — русскоговорящее сообщество
✌️
источник

NS

Nikita Stenin in GraphQL — русскоговорящее сообщество
Ну за разбор небольшого беспорядка в моей голове - всем спасибо) Просто тяжело перестроится, когда постоянно делал авторизацию через кукисы и сессии)))
источник

OR

Oleg R. in GraphQL — русскоговорящее сообщество
так а че в итоге выбрал?)
источник

S

Sergey in GraphQL — русскоговорящее сообщество
Nikita Stenin
Ну за разбор небольшого беспорядка в моей голове - всем спасибо) Просто тяжело перестроится, когда постоянно делал авторизацию через кукисы и сессии)))
есть мнение что token должен быть в кукисах
http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions/
с apollo можно и в кукисах передавать jwt
источник

NS

Nikita Stenin in GraphQL — русскоговорящее сообщество
Sergey
есть мнение что token должен быть в кукисах
http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions/
с apollo можно и в кукисах передавать jwt
Теоретически можно токен хранить и в куках, вместо локал сторадж. Просто тогда мы на клиенте ограничиваемся, только именем домена. Не проверял, утверждать точно не могу) Я на данный момент пишу бэкхенд на PHP и при желании можно использовать авторизацию с помощью сессий и вообще не нужно хранить токен))))
источник

S

Sergey in GraphQL — русскоговорящее сообщество
Nikita Stenin
Теоретически можно токен хранить и в куках, вместо локал сторадж. Просто тогда мы на клиенте ограничиваемся, только именем домена. Не проверял, утверждать точно не могу) Я на данный момент пишу бэкхенд на PHP и при желании можно использовать авторизацию с помощью сессий и вообще не нужно хранить токен))))
да, в этом плане GraphQL никак не ограничивает
источник

NS

Nikita Stenin in GraphQL — русскоговорящее сообщество
Oleg R.
так а че в итоге выбрал?)
Думаю попробовать с мутациями сделать. Надо тестовый проект сделать))) Сейчас пока сложно всю картину в уме держать, на бумагу нужно перенести)
источник

OR

Oleg R. in GraphQL — русскоговорящее сообщество
у тебя так в дополнение к сущностям твоей бизнес логики добавляются еще мусорные сущности, необходимые только для адекватной работы приложения - это я про токены, я бы на твоем месте жил с сессиями и не парился)
источник

NS

Nikita Stenin in GraphQL — русскоговорящее сообщество
Oleg R.
у тебя так в дополнение к сущностям твоей бизнес логики добавляются еще мусорные сущности, необходимые только для адекватной работы приложения - это я про токены, я бы на твоем месте жил с сессиями и не парился)
С сессиями проще, потому что куки автоматически передаются в запросе, а с токеном нужно самому его в запрос вставлять. Но если приложение и бэкенд на разных доменах, то этот механизм уже работать не будет. И в этом случае для сторонних приложений надо будет писать 2 метода авторизации
источник

NS

Nikita Stenin in GraphQL — русскоговорящее сообщество
Ну а graphql все таки хорошая штука)
источник
2017 August 18

ИБ

Игорь Богомолов in GraphQL — русскоговорящее сообщество
Всем привет, пытаюсь реализовать у себя CRUD и столкнулся с проблемой - не могу найти толковых примеров с ним. Я хочу одним запросом выполнить сразу несколько действий.  Так как мутации выполняются последовательно, я попытался получить результат выполнения одной функции (id созданной записи) и использовать его в другой (для обновления этой записи). Но передать его я могу только через переменную, которая видна во всех резолверах. Как это обычно вообще делается?
https://gist.github.com/anonymous/07f37dfa44e50dc19331a10804512ab7
источник

DG

Damir Garifullin in GraphQL — русскоговорящее сообщество
Может не надо так делать? Не стоит сделать отдельную мутацию, которая за собой будет скрывать эту связь между сущностями?
источник

DG

Damir Garifullin in GraphQL — русскоговорящее сообщество
Например, в качестве аргумента передавать композитный объект.
источник

ИБ

Игорь Богомолов in GraphQL — русскоговорящее сообщество
Не очень хочется плодить функции
(и классы). У меня их около 20 и для каждой прийдется что-то подобное писать. + не могу найти нигде примеров использования чего-то подобного.
источник