ここで、vuex がログイン状態の保存を実装し、未ログイン状態での閲覧を許可しない方法についての記事を共有します。これは良い参考値であり、皆様のお役に立てれば幸いです。
基本的な考え方は、vuex 状態管理を使用してログイン状態を保存し (実際にはトークンなどの値を保存することを意味します)、ルーティングジャンプの前にログイン状態を判断することです。vue-router のグローバル フロント ガードを使用できます。 beforeEach を使用するか、beforeEnter を使用してルート排他ガードを使用することもできます。
ナビゲーションガード
その名前が示すように、vue-routerによって提供されるナビゲーションガードは、主にジャンプまたはキャンセルによってナビゲーションをガードするために使用されます。ルートナビゲーションプロセスには、グローバル、個々のルート固有、またはコンポーネント レベルの変更は、$route オブジェクトを監視するか、コンポーネント内の beforeRouteUpdate
を使用することによって、開始/終了ナビゲーション ガードをトリガーしないことに注意してください。ナビゲーションの解析プロセスを完了します 1. ナビゲーションがトリガーされます。
3. 再利用されたコンポーネントで、グローバルの beforeEach ガードを呼び出します。 +) 5. ルーティング設定での呼び出し 7. グローバル beforeResolve ガードの呼び出し。 . グローバル afterEach フックを呼び出します。 12. 作成されたインスタンスを使用して、 next に渡されるコールバック関数を呼び出します。グローバル フロント ガードを登録しますconst router = new VueRouter({ ... }) router.beforeEach((to, from, next) => { // ... })
必ず次のメソッドを呼び出してください。そうしないとフックが解決されません。
ルートの専用ガード
ルーティング設定で beforeEnter ガードを直接定義できます:const router = new VueRouter({ routes: [ { path: '/foo', component: Foo, beforeEnter: (to, from, next) => { // ... } } ] })
vuexをインストールしたら
store.jsimport Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex); const state = { isLogin: 0 } const mutations = { changeLogin(state,status){ state.isLogin = status; } } const actions = { loginAction({commit}){ commit('changeLogin',1); } } export default new Vuex.Store({ state, actions, mutations })
login.vueを作成します
「vuex」からインポート{mapActions,mapState}を導入しますログイン ステータスが変化したら、base_url がパスになりますexport default { name: 'Login', data(){ return{ loginForm: { username: '', password: '', }, rules: { username: [ { required: true, message: '请输入用户名', trigger: 'blur' }, ], password: [ { required: true, message: '请输入密码', trigger: 'blur' } ], }, showLogin: false } }, mounted(){ this.showLogin = true; }, computed: { ...mapState(['isLogin']) }, methods: { ...mapActions(['loginAction']), submitForm(formName){ this.$refs[formName].validate((valid) => { if(valid){ if(this.loginForm.username == 'aaa' && this.loginForm.password == '111'){ console.log('验证通过'); this.loginAction(); this.$router.push('manage'); }else{ console.log('账号密码出错'); // this.$message.error('账号密码出错'); this.$message({ type: 'error', message: '账号密码出错' }); } console.log('请求地址: ' + base_url); }else{ console.log('验证失败'); return false; } }) } } }
前各使用例
router.beforeEach((to,from,next)=>{ if(to.meta.check){ var check = async function(){ const result = await checkUser(); if(result.status == 0){ next(); }else{ alert('用户未登录'); next({path: '/login'}); } } check(); //后台验证session }else{ next(); } })
export default new Router({ routes: [ { path: '/login', component: Login }, { path: '/manage', name: '', component: Manage, beforeEnter: (to,from,next)=> { //导航守卫 console.log(to) console.log(from) if(store.state.isLogin == 1){ console.log('用户已经登录'); next(); }else{ console.log('用户未登录'); next({path: '/login',query:{ Rurl: to.fullPath}}); //未登录则跳转到登陆界面,query:{ Rurl: to.fullPath}表示把当前路由信息传递过去方便登录后跳转回来 } } } ] })
Node.js登録メール起動機能実装例
Webpackのbabel-loaderファイルプリプロセッサ詳細解説
jQueryニュース放送スクロールとフェードイン・フェード実装例-アウトエフェクト
以上がvuexを使用してログイン状態を保存し、非ログイン状態での閲覧を禁止するには具体的にどのような方法がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。