рд╣реИрд▓реЛ рджреЛрд╕реНрддреЛрдВ,
рдореИрдВрдиреЗ рдЕрдХреНрд╖реЛрдВ рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд╕рдВрд░рдХреНрд╖рд┐рдд рдПрдкреАрдЖрдИ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдСрде рд╣реЗрдбрд░ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рдХрдВрд╕реЛрд▓ рдкрд░ рдЬрд╛рддрд╛ рд╣реВрдВ рдФрд░ рд╕реНрдерд╛рдиреАрдп рд╕реНрдЯреЛрд░реЗрдЬ рд╕реЗ рдЯреЛрдХреЗрдо рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рдЕрдХреНрд╖ рдЕрднреА рднреА рдЗрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬ рд░рд╣рд╛ рд╣реИ рдЕрджреНрдпрддрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдХреНрдпрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЗрд╕рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдореЗрд░реЗ рд▓реЗрдЦ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рдЯреЛрдХрди рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдзрдиреНрдпрд╡рд╛рдж!
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдорд╛рди рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдкрд╛рд░рд┐рдд рд╣реЗрдбрд░ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдЖрд▓рд╕реА рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕реЛрдЪ:
рд╣реЗрдбрд░ рд╣реИрд╢ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрд╕реБрдХрддрд╛ рд╕реЗ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп ( axios.create({headers: {...}})
рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣реЗрдбрд░ ( axios.create({headers: () => {...}}
) рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрд╣ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЗрд╕ рд╕рдордп рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рдЙрд╕реА рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рдореИрдВрдиреЗ рдЕрд▓реНрдкрд╛рд╡рдзрд┐ рдореЗрдВ рдЬреЛ рдХрд┐рдпрд╛ рд╡рд╣ transformRequest
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╣реИрдХ рдФрд░ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдЙрдЪрд┐рдд рдЖрд▓рд╕реА-рд▓реЛрдбрд┐рдВрдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред
рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рджреЗрдЦреЗрдВред auth()
рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЯреЛрдХрди рдореЗрдВ рд▓реЙрдЧ рдЗрди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
let HTTP = axios.create({
baseURL: baseurl,
transformRequest: [function (data, headers) {
headers['Authorization'] = auth()
return JSON.stringify(data)
}],
headers: {
'Content-Type': 'application/json'
}
})
рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИред рдЕрдЧрд░ рдЕрдиреБрд░реЛрдз рдХрд╛ рдореВрд▓ рдпреВрдЖрд░рдПрд▓ рдореЗрд░реЗ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рд╣реИ рддреЛ рдореИрдВ рдСрде рд╣реЗрдбрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ (рддреГрддреАрдп рдкрдХреНрд╖реЛрдВ рдХреЛ рдкреНрд░рдорд╛рдг-рдкрддреНрд░ рднреЗрдЬрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП)ред рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЯреЛрдХрди рдмрджрд▓рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЯреЛрдХрди рд░реАрдлреНрд░реЗрд╢ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк) рддреЛ рдЕрдЧрд▓рд╛ рдЕрдиреБрд░реЛрдз рдирдпрд╛ рдЯреЛрдХрди рдЙрдард╛рддрд╛ рд╣реИред рдореИрдВ рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдХреЙрд▓ рд╕рд╛рдЗрдЯ рд╕реЗ рд╣реЗрдбрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдореИрдВ рдореМрдЬреВрджрд╛ рдореВрд▓реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реВрдВ, рдпрджрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдХрд╛рд░рдг рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛред
axios.interceptors.request.use(
config => {
if (config.baseURL === baseApiAddress && !config.headers.Authorization) {
const token = getToken();
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
}
return config;
},
error => Promise.reject(error)
);
@mattstrayer рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ getToken() рд╡рд┐рдзрд┐ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ рдЯреЛрдХрди рдХреЛ рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдпрд╛ рдПрд╕рд┐рдВрдХреНрд╕рд╕реНрдЯреЛрд░реЗрдЬ (рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡) рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВ? рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж!
рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реБрдЖред
axios.create({
baseURL: '<your-api>',
headers: {
Authorization: {
toString () {
return `Bearer ${localStorage.getItem('token')}`
}
}
}
})
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдореЗрд░реА http.js
рдлрд╝рд╛рдЗрд▓:
import axios from 'axios';
import {store} from './store';
const http = axios.create ({
baseURL: process.env.VUE_APP_ROOT_API,
timeout: 1000,
headers: {'Content-Type': 'application/json'},
});
http.interceptors.request.use (
function (config) {
const token = store.token;
if (token) config.headers.Authorization = `Bearer ${token}`;
return config;
},
function (error) {
return Promise.reject (error);
}
);
export default http;
рдореЗрд░рд╛ рд╕реНрдЯреЛрд░, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЧреЗрдЯ/рд╕реЗрдЯ "рдХреНрд▓рд╛рд╕"
export const store = {
_username: '',
_email: '',
_token: '',
isLogged () {
return this.token
},
set username (str) {
this._username = str
localStorage.setItem('username',str)
},
get username () {
return this._username || localStorage.getItem('username')
},
set email (str) {
this._email = str
localStorage.setItem('email',str)
},
get email () {
return this._email || localStorage.getItem('email')
},
set token (str) {
this._token = str
localStorage.setItem('token',str)
},
get token () {
return this._token || localStorage.getItem('token')
}
}
рдореЗрд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗрд╡рд╛ "рд╡рд░реНрдЧ":
import http from './http'
export const user = {
ping: () => http.get('/users/ping'),
save: (user) => http.post('/users', user)
}
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдореЗрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
import {user} from '@/services'
user.ping().then( r => {
console.log(r.data)
})
btw,
process.env.VUE_APP_ROOT_API
рдФрд░@/services
Vue рдЪреАрдЬреЗрдВ рд╣реИрдВ...
рдкрд░рд┐рдгрд╛рдо:
@danielschmitz рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж !!
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рд╕рдордЭ рд▓рд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреЛрдИ рдмрдЧ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
рдПрдкреАрдЖрдИ рдХреЙрд▓ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореЗрд░рд╛ рдЯреЛрдХрди рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХреЛ рдПрд╕рд┐рдВрдХ/рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рдЙрдкрдпреЛрдЧреА рдкрд╛рдпрд╛:
http.interceptors.request.use (
async (config) => {
const token = await getToken(); // slightly longer running function than example above
if (token) config.headers.Authorization = `Bearer ${token}`;
return config;
},
(error) => {
return Promise.reject (error);
}
);
рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИред рдЕрдЧрд░ рдЕрдиреБрд░реЛрдз рдХрд╛ рдореВрд▓ рдпреВрдЖрд░рдПрд▓ рдореЗрд░реЗ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рд╣реИ рддреЛ рдореИрдВ рдСрде рд╣реЗрдбрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ (рддреГрддреАрдп рдкрдХреНрд╖реЛрдВ рдХреЛ рдкреНрд░рдорд╛рдг-рдкрддреНрд░ рднреЗрдЬрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП)ред рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЯреЛрдХрди рдмрджрд▓рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЯреЛрдХрди рд░реАрдлреНрд░реЗрд╢ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк) рддреЛ рдЕрдЧрд▓рд╛ рдЕрдиреБрд░реЛрдз рдирдпрд╛ рдЯреЛрдХрди рдЙрдард╛рддрд╛ рд╣реИред рдореИрдВ рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдХреЙрд▓ рд╕рд╛рдЗрдЯ рд╕реЗ рд╣реЗрдбрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдореИрдВ рдореМрдЬреВрджрд╛ рдореВрд▓реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реВрдВ, рдпрджрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдХрд╛рд░рдг рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛред
axios.interceptors.request.use( config => { if (config.baseURL === baseApiAddress && !config.headers.Authorization) { const token = getToken(); if (token) { config.headers.Authorization = `Bearer ${token}`; } } return config; }, error => Promise.reject(error) );
рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИред рдЕрдЧрд░ рдЕрдиреБрд░реЛрдз рдХрд╛ рдореВрд▓ рдпреВрдЖрд░рдПрд▓ рдореЗрд░реЗ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рд╣реИ рддреЛ рдореИрдВ рдСрде рд╣реЗрдбрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ (рддреГрддреАрдп рдкрдХреНрд╖реЛрдВ рдХреЛ рдкреНрд░рдорд╛рдг-рдкрддреНрд░ рднреЗрдЬрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП)ред рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЯреЛрдХрди рдмрджрд▓рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЯреЛрдХрди рд░реАрдлреНрд░реЗрд╢ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк) рддреЛ рдЕрдЧрд▓рд╛ рдЕрдиреБрд░реЛрдз рдирдпрд╛ рдЯреЛрдХрди рдЙрдард╛рддрд╛ рд╣реИред рдореИрдВ рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдХреЙрд▓ рд╕рд╛рдЗрдЯ рд╕реЗ рд╣реЗрдбрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдореИрдВ рдореМрдЬреВрджрд╛ рдореВрд▓реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реВрдВ, рдпрджрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдХрд╛рд░рдг рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛред