【Vuex】Rails(devise_token_auth)+Vue.js의 SPA로 로그아웃하는 샘플 코드
소개
Rails + Vue.js의 SPA에서 devise_token_auth를 사용하여 로그 아웃하는 샘플 코드를 남깁니다.
요청 헤더 정보를 저장하는 데 Vuex를 활용했습니다.
환경
OS: macOS Catalina 10.15.1
Ruby: 2.6.5
Rails: 6.0.2.1
Vue: 2.6.10
vuex: 3.1.2
axios: 0.19.0
사고방식
devise_token_auth의 공식 문서의 sign_out 주제에는 이렇게 쓰여져 있습니다.
Use this route to end the user's current session. This route will invalidate the user's authentication token. You must pass in uid, client, and access-token in the request headers.
요청 헤더에
uid
, client
, access-token
를 포함하여 DELETE 요청을 던져야합니다.이 헤더 정보를 저장하기 위해 Vuex를 사용합니다.
코드
store.js
import 'babel-polyfill'
import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
//ヘッダの入れ物を用意。
headers: null,
},
mutations: {
//サインイン時のレスポンスヘッダから情報を抜き出して保存しておく。
signIn(state, payload) {
state.headers = {
"access-token": payload["access-token"],
"client": payload["client"],
"uid": payload["uid"],
};
},
//サインアウトしたらヘッダを空にしておく。
signOut(state) {
state.headers = null;
},
},
actions: {
//paramsはemailなどのユーザー情報が入っていると思って下さい。
//(paramsへの情報の入れ方は今回割愛。)
signIn(context, params) {
axios
.post('/api/v1/auth/sign_in', params)
.then(function (response) {
//ここでレスポンスヘッダを受け取る。
context.commit('signIn', response.headers);
})
},
signOut(context) {
axios
//ここでヘッダ情報を呼び出してDELETEリクエストに含める
.delete('/api/v1/auth/sign_out', { headers: context.state.headers })
.then(function () {
context.commit('signOut');
})
},
},
})
export default store
※본래는
currentUser
와 같은 state
도 준비해야 할까 생각합니다만, 이야기를 슈퍼 심플하게 하기 위해서 컷 하고 있습니다.전화하는 방법
Webpack의 진입점이 되는 파일에서 이전
store.js
을 로드합니다.main.js
import Vue from 'vue'
import App from '../App.vue'
import store from './store.js' //こちら
document.addEventListener('DOMContentLoaded', () => {
const app = new Vue({
store, //こちら
render: h => h(App)
}).$mount()
document.body.appendChild(app.$el)
})
↓
store.js
를 읽으면 임의의 단일 파일 컴퍼넌트내에서, 다음과 같이 해 signOut
를 호출할 수 있습니다.Anything.vue
<template>
<div>
<button @click="signOut">ログアウト</button>
</div>
</template>
<script>
export default {
methods: {
signOut() {
this.$store.dispatch('signOut')
}
}
}
</script>
※예에서는 매우 심플하게, 사인아웃에 필요한 개소만 빼내고 있습니다.
결론
끝까지 읽어 주셔서 감사합니다
누군가의 도움이 되길 바랍니다
참고로 한 사이트 (항상 감사합니다)
Reference
이 문제에 관하여(【Vuex】Rails(devise_token_auth)+Vue.js의 SPA로 로그아웃하는 샘플 코드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/terufumi1122/items/a2c970b1c2f5cb175791텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)