سلام
خسته نباشید
در برنامه ی من زمانیکه کاربر لاگین میکنه یک access_token,یک refresh_token و یک expire_in دریافت میکنه
بعد از یک دقیقه access_token منقضی میشه
در این لحظه یک درخواست به همراه اون refresh_token ارسال میشه و یک access_token,یک refresh_token و یک expire_in جدید دریافت میشه
وقتی هم که refresh_token منقضی بشه کاربر به صفحه ی لاگین میره
کدم به صورت زیر هست
.catch(err => {
// console.log(err.response.status);
if(err.response.status === 401){
console.log("Unauthorized");
const result = axios
.post("http://localhost:8000/oauth/token", this.refresh)
.then((response) => {
localStorage.setItem("token", response.data.access_token);
localStorage.setItem("refresh_token", response.data.refresh_token);
// eventBus.emit("showlog" , this.log);
axios.get('http://localhost:8000/api/posts',{
headers:
{
'Authorization': 'Bearer ' + localStorage.getItem('token'),
'Accept': 'application/json'
}
})
.then((response)=>{
this.posts = response.data;
})
.catch(err => console.log("error"))
})
.catch(err => {
if(err.response.status === 401){
console.log("Unauthorized");
localStorage.removeItem("token");
localStorage.removeItem("refresh_token");
this.$router.push({ name: "LoginRegister" });
}
})
}
})
این کد برام درست اجرا میشه
میخواستم بدونم چطور میتونم همین کد رو به صورت global در برنامه بنویسم
ممنون میشم راهنماییم کنید🌺
سلام
من به این نتیجه رسیدم که ریداکس برای کد من کاربردی نیست
در واقع من میخوام یک تیکه کد به ازای همه ی درخواست ها برای من اجرا بشه
میخوام بدونم چطور میشه اینکارو کرد؟
ببین من توی ری اکت یه چنین کاری انجام میدم
ساز و کارشو برات مینویسم سرچ بزن شاید توی ویو جی اس هم شدنی بود
من توی ری اکت وب سرویسهارو با یه پکیج صدا میزنم مثل axios
این پکیج ها یه چیزی داره به اسم مانیتورینگ
یعنی به ازای هر. درخواستی که به سرور ارسال میشه میتونی مانیتورینگ انجام بدی و خیلی چیزها رو چک کنی و خیلی چیزهارو قبل از ریسپانس بررسی کنی
مثلا توی مانیتورینگ من تمام وب سرویسهارو یکبار چک میکنم که اگه خطای ۴۲۲ داد سریع اونجا سرویس لاگ اوت رو صدا میزنم و همونجا میگم باید دوباره لاگین کنی و هدایتش میکنم به صفحه لاگین
چنین چیزی توی ویو هم باید باشه
مثلا توی ریداکست یه اکشن بنویسی برای کاری که میخوای انجام بدی و بعد توی مانیتورینگ اون شرایط مورد نظرتو بررسی کنی و اون اکشن رو صدا بزنی
اصطلاحا بهش watch api یا incerpretor یا مانیتورینگ api هم میگن با این کلمات میتونی سرچ کنی
سلام @kazemi
صبحتون بخیر
خیلی خیلی ممنونم از توضیح خوبتون😘🌺
بله با interceptorتونستم کد رو بنویسم
این کد من هست
import axios from 'axios'
// apply interceptor on response
axios.interceptors.response.use(function (response) {
if (response.status === 200 && response.data.message) {
console.log("salam")
}
if (response.status === 201 && response.data.message) {
console.log("salam salam");
}
return response
}, function (error) {
let expireRefreshToken= false;
// Do something with response error
// check for errorHandle config
// if has response show the error
if (error.response) {
if (error.response.status === 404 || error.response.status === 400) {
console.log("400 error code ");
console.error(error.response.data.message)
}
if (error.response.status === 401 ) {
// console.log(expireRefreshToken);
console.log("Unauthorized");
const result = axios
.post("http://localhost:8000/oauth/token",{
refresh_token: localStorage.getItem("refresh_token"),
grant_type: "refresh_token",
client_id: "4",
client_secret:"GC97kY9kKuhnk8byBlYcMA2gTRuUw3qLWxHuLcZh"
})
.then((response) => {
console.log("refresh token")
// console.log( response.data.access_token);
localStorage.setItem("token", response.data.access_token);
localStorage.setItem("refresh_token", response.data.refresh_token);
console.log("token has been refreshed");
})
.catch(err => {
if(err.response.status === 401 && expireRefreshToken === false){
console.log("expiredRefreshToken");
localStorage.removeItem("token");
expireRefreshToken = true;
console.log(expireRefreshToken);
// return Promise.reject(error);
router.push("/loginRegister");
}
})
}
if (error.response.status === 401 && expireRefreshToken === true) {
console.log("Unauthorized");
router.push("/loginRegister");
}
}
return Promise.reject(error)
}
)
اما الان مشکلی که هست بعد از expireشدن توکن به صورت بی وقفه requestارسال میشه
تا زمانیکه بهم این ارور رو میده
[HTTP/1.1 429 Too Many Requests 26ms]
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟