Size: a a a

2020 October 02

DS

Dmitriy Shuleshov in ☄️ effector
mg901
не все, а только токен
Сложно....
Давай с другой стороны. Если ты сейчас токен положишь в обычную переменную, что у тебя отвалится?
источник

m

mg901 in ☄️ effector
Dmitriy Shuleshov
Сложно....
Давай с другой стороны. Если ты сейчас токен положишь в обычную переменную, что у тебя отвалится?
export const TOKEN_NAME = 'jwt';
const API_ROOT = 'https://conduit.productionready.io/api';

type Request = <T>(method: string, url: string, data?: unknown) => Promise<T>;

const request: Request = async (method, url, data) => {
 const token = JSON.parse(String(localStorage.getItem(TOKEN_NAME)));

 const headers = {
   'Content-Type': 'application/json',
 };

 const options: RequestInit = {
   headers: token ? { ...headers, Authorization: `Token ${token}` } : headers,
   method: method.toUpperCase(),
   body: data ? JSON.stringify(data) : null,
 };

 const response = await fetch(`${API_ROOT}${url}`, options);

 if (response.ok) {
   return response.json();
 }

 throw await response.json();
};

export const get = <T>(url: string): Promise<T> => request<T>('get', url);
export const post = <T = void>(url: string, body?: unknown): Promise<T> =>
 request<T>('post', url, body);

export const put = <T = void>(url: string, body: unknown): Promise<T> =>
 request<T>('put', url, body);

export const del = <T = void>(url: string): Promise<T> =>
 request<T>('delete', url);
источник

m

mg901 in ☄️ effector
Я сейчас именно так и делаю.
источник

m

mg901 in ☄️ effector
но… вроде как это не безопасно
источник

AO

Aleksandr Osipov in ☄️ effector
что за токен?
источник

AO

Aleksandr Osipov in ☄️ effector
от АПИ ?
источник

AO

Aleksandr Osipov in ☄️ effector
просто надо отличать ключ от апи который и так все видят
источник

AO

Aleksandr Osipov in ☄️ effector
и токен который в результате обмена на credentials пользователя получаем
источник

AO

Aleksandr Osipov in ☄️ effector
второй конечно надо беречь
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
mg901
у меня ни чего лучше этого варианта в голову ни чего не пришло
const instance = axios.create({
 baseURL: "https://api.example.com",
});

$token.watch((token) => {
 instance.defaults.headers.common['Authorization'] = token;
});
типичный сайд-эффект, нормальный выбор, что не так)
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
mg901
Нет проблемы, я считаю, что обёртки над attach - перебор
правильно поставленный вопрос это половина ответа. вместо того, чтобы удивляться «что то я заюзал метод и он НЕ ОЧ» достаточно было поинтересоваться, как делать конкретно твою проблему
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
если решение твоей проблемы заключается в мутации глобального инстанса axios, то разумеется это watch/effect а не attach
источник

m

mg901 in ☄️ effector
🚀🔬 🚀🔬🚀🔬
правильно поставленный вопрос это половина ответа. вместо того, чтобы удивляться «что то я заюзал метод и он НЕ ОЧ» достаточно было поинтересоваться, как делать конкретно твою проблему
я не спорю, с выражением мысли проблемы имеются
источник

m

mg901 in ☄️ effector
🚀🔬 🚀🔬🚀🔬
если решение твоей проблемы заключается в мутации глобального инстанса axios, то разумеется это watch/effect а не attach
ок, так умеет axios, а если я хочу юзать другие либы в которых мутация инстанса невозможна?
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
mg901
ок, так умеет axios, а если я хочу юзать другие либы в которых мутация инстанса невозможна?
а токен откуда берётся?
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
в примере выше у тебя токен читается из localStorage, это часть сайд-эффекта
источник

m

mg901 in ☄️ effector
скорее всего предётся завтодить переменную
let instance = null token.watch(token => instance = someLibrary({token: token}))
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
опять
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
дейли ремайндер
источник