한 Vuejs 구성 요소에서 다른 구성 요소로 OAuth 토큰 전달
OAuth 토큰은 OAuth 로그인에 성공한 후에 취득됩니다.SuccessOAuth.vue
요소.토큰의 자세한 내용은 다음과 같습니다.
checkforTokens(){
const queryString = this.$route.query;
console.log(queryString);
const token = this.$route.query.accessToken
console.log(token);
const secret = this.$route.query.tokenSecret
console.log(secret);
this.tokens.token = token;
this.tokens.secret = secret;
}
},
beforeMount() {
this.checkforTokens();
}
이제 이 토큰을 다른 구성 요소에 사용합니다.apiCalls.vue
이 토큰 상세 내역을 사용하여 API 메서드를 호출합니다.
<script>
...
methods:{
getProductDetails() {
console.log("==========================================");
console.log(".. Get Product details....");
axios
.get("/auth/getShpDetails", {
params: {
token: this.tokens.token
}
})
.then(response => {
const productInfo = response.data;
console.log("Product info :" + productInfo);
});
},
}
</script>
토큰 세부 정보를 전달하려면 어떻게 해야 합니까?SuccessOAuth
의 구성요소.apiCalls
소품 방법을 사용하려고 했지만 스크립트 태그에 토큰 값을 가져올 수 없었습니다. 다른 방법을 사용할 수 없습니다.$emit
및 사용vuex
문제에 대한 최선의 방법과 올바른 해결책을 제시해 주십시오.
@Nishant Sham의 제안대로, 저는 단지 그 수정에 불과합니다.action
에 있어서의 방법.index.js
아래 그림과 같이
import Vue from 'vue'
import Vuex from "vuex";
Vue.use(Vuex);
export default new Vuex.Store({
state: {
token: ''
},
getters: {
getToken(state){
return state.token;
}
},
mutations: {
setToken(state, tokenValue){
state.token = tokenValue;
}
},
actions: {
setToken({commit}, tokenValue){
commit("setToken", tokenValue);
}
}
});
vue 컴포넌트에서 호출하는getters
그리고.setters
다음과 같습니다.
<script>
//Set token value
var token = "dwe123313e12";//random token value assigned
this.$store.commit("setToken", token);
.....
//Get token value
var getToken = this.$store.getters.getToken;
</script>
로컬 저장소 또는 쿠키에 토큰을 보관할 수 있습니다.그리고 필요에 따라 사용하세요.이 샘플 코드는 다음과 같습니다.
const token = 'token'
export function getToken() {
return localStorage.getItem(token)
}
export function setToken(tokenData) {
return localStorage.setItem(token, tokenData)
}
export function removeToken() {
return localStorage.removeItem(token)
}
사용할 수 있습니다.Vuex
상태 관리용입니다.여기 기사가 있습니다.
이를 위한 한 가지 방법은 vuex일 수 있습니다.
루트에서 토큰 필드를 생성하고 임의의 vue 구성 요소 및 라이프 사이클 후크에서 호출할 수 있는 getter를 하나 만듭니다.
두 번째 방법은 토큰을 localStorage로 설정하고 필요한 장소에서 입수/사용하는 것입니다.
나는 vuex 방식을 선호한다 하나의 진실의 원천이 보장되는 방식으로...
vuex 스토어의 사용 방법은 다음과 같습니다.
먼저 사용하는 vue 버전에 따라 vuex를 설치합니다.일반적으로 vue3의 경우 vue3를 사용하는 것이 좋습니다.
npm i vuex@next
작성하다
Store
폴더 안에 있는 폴더 안에 있는 폴더src
폴더와 그 안에index.js
다음 코드를 사용하여
import { createStore } from "vuex";
import axios from "axios"; // I Use axios for making API CALLS hence this pkg
const store = createStore({
state() {
return {
token: null,
};
},
});
export default store;
현재 앱의 기본 스토어 및 상태입니다.
- 액션은 API 호출과 서버로부터의 데이터 취득에 사용되는 비동기 코드이므로 먼저 액션을 추가합니다.
actions: {
async login(context, payload) {
try {
const result = await axios({
method: "POST",
url: "auth/login",
data: {
email: payload.email,
password: payload.password,
},
});
//If the Request Successed with Status 200
if (result.status === 200) {
//A: Extract the Token
const token = result.data.token;
//B. Token to LocalStorage Optional if you wish to set it to localstorgae
localStorage.setItem("token", token);
//c: UPDATE THE STATE by calling mutation
context.commit("setToken", {
token,
});
}
} catch (err) {
console.log(err);
}
},
},
- 다음 단계는 앱 상태 업데이트에 사용되는 변환 추가입니다.
mutations: {
setToken(state, token) {
state.token = token;
},
},
- 마지막으로, 앱 구성 요소 내에서 계산된 데이터를 가져오는 데 사용할 getter는 다음과 같습니다.
getters: {
getToken(state) {
return state.token;
},
},
결국 이 모든 것 후에 너는index.js
이렇게 생겼을 거야
import { createStore } from "vuex";
import axios from "axios";
const store = createStore({
state() {
return {
token: null,
};
},
actions: {
async login(context, payload) {
try {
const result = await axios({
method: "POST",
url: "auth/login",
data: {
email: payload.email,
password: payload.password,
},
});
//If the Request Successed with Status 200
if (result.status === 200) {
//A: Extract the Token
const token = result.data.token;
//B. Token to LocalStorage Optional if you wish to set it to localstorgae
localStorage.setItem("token", token);
//c: UPDATE THE STATE by calling mutation
context.commit("setToken", {
token,
});
}
} catch (err) {
console.log(err);
}
},
},
mutations: {
setToken(state, token) {
state.token = token;
},
},
getters: {
getToken(state) {
return state.token;
},
},
});
export default store;
메모 - 이것은 vuex의 코드가 프로젝트 요건에 따라 동일한 결과를 얻을 수 있는 방법이 많이 있는 것처럼 보이는 일반적인 표현입니다.위 코드는 최종 코드가 아닙니다.테스트/예시/프로젝트 요건에 따라 조정해야 하기 때문입니다.
언급URL : https://stackoverflow.com/questions/67553418/passing-oauth-token-from-one-vuejs-component-to-another
'sourcecode' 카테고리의 다른 글
이.$set()은 larabel을 사용하는 vue2.0에서 작동하지 않습니다. (0) | 2022.07.31 |
---|---|
스택 트레이스를 잃지 않고 Java에서 예외 재투입 (0) | 2022.07.31 |
오래된 데스크톱 컴퓨터에 소형 운영체제를 구축하려면 어떻게 해야 하나요? (0) | 2022.07.31 |
"Java Date Format is not threadsafe" (자바 날짜 포맷은 스레드 세이프가 아닙니다)는 어떤 결과를 초래합니까? (0) | 2022.07.31 |
'pow' 및 'floor'에 대한 참조가 정의되지 않았습니다. (0) | 2022.07.31 |