vuex+localStorageログイン
6971 ワード
1.vuex npm i-s vuexをインストール(axiosがインストールされていない場合、npm i-s axios).新しいstoreフォルダ、新しいindex.jsファイル(またはmain.jsで直接構成)
3.storeフォルダでmodulesフォルダを新規作成し、userを新規作成します.jsファイル
3.とmain.js同級はpermissionを新規作成します.js,主にログイン権限の問題を判断する
4.utilにクッキーを新規作成する.jsファイル
5.utilフォルダを新規作成し、utilにindexを新規作成する.jsファイル
6.ログインページ、新規login.vue
7.ログインに成功すると、ホームページに表示され、viewフォルダ内にmainを新規作成する.vue、ここのページは自分の関連することによって異なっていることができて、だから私のここはただ登録した後にアカウントの関連する情報の表示部分だけを放します
import Vuex from 'vuex' //
import user from './modules/user'
Vue.use(Vuex)
export default new Vuex.Store({
modules: {
user
}
})
3.storeフォルダでmodulesフォルダを新規作成し、userを新規作成します.jsファイル
import { login, getInfo } from "@/api/user"
import cookies from "@/utils/cookies"
import router from "@/router/index"
// , , localstorage
let defaultName=' '
try{
if(localStorage.setItem('user_name', name)){
defaultName=localStorage.setItem('user_name', name)
}
}catch (e) {
}
export default {
namespaced: true,
state: {
id:0 || localStorage.getItem('user_id'),
name: "" || localStorage.getItem('user_name'),
},
getters: {
id:state=>state.id,
name: state => state.name,
},
mutations: {
updateId (state, id) {
state.id = id
// ID localStorage , , vuex , ( )
localStorage.setItem('user_id', id)
},
updateName (state, name) {
state.name = name
console.log("mutation:"+state.name)
// localStorage , , vuex , ( ) F
localStorage.setItem('user_name', name)
}
}
},
}
3.とmain.js同級はpermissionを新規作成します.js,主にログイン権限の問題を判断する
import router from "@/router/index"
import cookies from "./utils/cookies";
router.beforeEach((to, from, next) => {
if (to.path === "/login") return next() // .
const JSESSIONID=cookies.get('JSESSIONID')
console.log("JSESSIONID:",JSESSIONID)
if (JSESSIONID) {
next()
} else {
next("/login")
}
})
4.utilにクッキーを新規作成する.jsファイル
import Cookies from "js-cookie"
export default {
set(key, value, options) {
Cookies.set(key, value, options)
},
get(key) {
return Cookies.get(key)
},
remove(key) {
return Cookies.remove(key)
},
}
5.utilフォルダを新規作成し、utilにindexを新規作成する.jsファイル
/**
*
*/
export function clearLoginInfo () {
cookies.remove('JSESSIONID')
// localStorage
localStorage.setItem('user_name', null)
localStorage.setItem('user_id', 0)
// store.commit('resetStore')
router.options.isAddDynamicMenuRoutes = false
}
6.ログインページ、新規login.vue
import cookies from "@/utils/cookies";
import axios from 'axios'
export default {
data() {
return {
form: {
userName: "",
password: ""
},
rules: {
userName: [{ required: true, message: " ", trigger: "blur" }],
password: [{ required: true, message: " ", trigger: "blur" }]
}
};
},
methods: {
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
axios.post('xxx',{
params: {
'username': this.form.userName,
'password': this.form.password
},false,'x-www-form-urlencoded'),
// x-www-form-urlencoded post ,
headers:{
'content-type':'application/x-www-form-urlencoded'
},
}).then(({data}) => {
if (data && data.code === 200) {//
console.log(data)
this.$message.success(data.msg)
cookies.set("JSESSIONID",data.data.sessionId)// JSESSIONID ,JSESSIONID session。 session JSESSIONID session 。
//
this.$router.replace({ name: 'home' })
} else {
this.$message.error(data.msg)
}
}).catch(() => {})
}
});
},
resetForm() {
this.$refs["form"].resetFields();
}
}
};
7.ログインに成功すると、ホームページに表示され、viewフォルダ内にmainを新規作成する.vue、ここのページは自分の関連することによって異なっていることができて、だから私のここはただ登録した後にアカウントの関連する情報の表示部分だけを放します
...
,{{ userName }}
import { clearLoginInfo } from '@/utils'
import axios from 'axios'
export default {
computed: {
userName:{
get () { return this.$store.state.user.name }
}
},
methods: {
//
logoutHandle() {
this.$confirm(` [ ] ?`, ' ', {
confirmButtonText: ' ',
cancelButtonText: ' ',
}).then(() => {
axios.post('xxx').then(({data}) => {
if (data && data.code === 200) {//
clearLoginInfo()
this.$router.push({name: 'login'})
}
})
}).catch(() => {
})
}
}
};