URL Nuxt JSへのストア持続状態
9782 ワード
マルチテナントは、認証と承認のためのより複雑な問題になります.フロントエンドのアプリとしてNuxt JSはこの問題に適応する必要があります
シナリオ
NYXT JSはフロントエンドアプリ、です
ユーザーは会社1または会社2としてログインできます.各々の会社は、IDを持ちます APIを打つとき、フロントエンドは会社ID を送らなければなりません
問題は、フロントエンドのストア会社IDを作成し、リクエストAPIを使用する方法です.私は、この問題を解決する1つの方法だけを会社のIDを格納する方法があります.
トークン
あなたはトークンに会社のIDを格納することができます、これはすぐにユーザーの情報を知っているAPIの視点から良いですが、ユーザーが変更する場合は、トークンを再作成するAPIをリコールする必要があります
局所記憶
LocalStorageは、ブラウザクライアントに情報を格納するために致命的に簡単です.私たちはlocalstorageにそれを格納し、それが必要なときにそれを使用することができます.しかし、問題はサーバー側で使いたいときです.Nuxt JSはサーバ側のレンダリングをサポートしているので、NuxtはLocalStorageをクライアント側でしかアクセスできないため、localstorageを読むことができません.
国家管理
状態管理は、サーバー側からアクセスして、ウェブサイトのどんなページからでもアクセス可能な問題LocalStorageを解決します.しかし、問題は、ユーザーがページを更新するときに状態管理がリセットされることです.
パラメータ
パラメータURLにいくつかの変数を格納し、必要に応じてparamを使うことができます.
私は、これが会社のIDまたは他の変数を格納する絶対的な解決策であるのを見ます.Googleは、長い間、あなたが異なるアカウントでGoogleにログインしたとき、これをします
クエリURLに現在のユーザを格納する
どのようにGoogleストアのユーザーがGoogleストアのユーザーにURLをログインしてログインする方法(Gmail . com)非常に良いアイデア.しかし、私たちは新しい問題を見つけました.すべてのプログラマは手動でそれを行うことはありません.この問題を解決するミドルウェアを作ろう
URLを更新するミドルウェアNuxt
このテクニックの名前はわからない
私たちはすべての変更ルートをクエリURLを更新する必要があります、私たちはNuxt JSによって提供されるミドルウェアでこれを行うことができます.私たちは会社のIDを状態管理とURLに格納します.このような流れでミドルウェアを作ります.
ユーザーがルートを変更するたびに
クエリ会社のIDを含む新しいURLにユーザーをリダイレクトする
ブラウザがページをリフレッシュするたびに、状態管理がリセットされ、URLクエリ会社IDから復元する必要があります
現在、我々はURLの上でパラメタユーザの会社IDを固守します.
ミドルウェアコード
まず第一に、我々は会社のIDのための国家管理を作成する必要があります.これはcompanystoreです.js
最後に、このミドルウェアを
それは私がこの問題を解決する方法ですが、私は別の記事Nuxtについては、このような持続性の状態を作成するために書いて発見したので、私は1つを作成します.このヘルプはあなたを助ける.
シナリオ
NYXT JSはフロントエンドアプリ、です
ユーザーは会社1または会社2としてログインできます.各々の会社は、IDを持ちます
問題は、フロントエンドのストア会社IDを作成し、リクエストAPIを使用する方法です.私は、この問題を解決する1つの方法だけを会社のIDを格納する方法があります.
トークン
あなたはトークンに会社のIDを格納することができます、これはすぐにユーザーの情報を知っているAPIの視点から良いですが、ユーザーが変更する場合は、トークンを再作成するAPIをリコールする必要があります
局所記憶
LocalStorageは、ブラウザクライアントに情報を格納するために致命的に簡単です.私たちはlocalstorageにそれを格納し、それが必要なときにそれを使用することができます.しかし、問題はサーバー側で使いたいときです.Nuxt JSはサーバ側のレンダリングをサポートしているので、NuxtはLocalStorageをクライアント側でしかアクセスできないため、localstorageを読むことができません.
国家管理
状態管理は、サーバー側からアクセスして、ウェブサイトのどんなページからでもアクセス可能な問題LocalStorageを解決します.しかし、問題は、ユーザーがページを更新するときに状態管理がリセットされることです.
パラメータ
パラメータURLにいくつかの変数を格納し、必要に応じてparamを使うことができます.
私は、これが会社のIDまたは他の変数を格納する絶対的な解決策であるのを見ます.Googleは、長い間、あなたが異なるアカウントでGoogleにログインしたとき、これをします
クエリURLに現在のユーザを格納する
どのようにGoogleストアのユーザーがGoogleストアのユーザーにURLをログインしてログインする方法(Gmail . com)非常に良いアイデア.しかし、私たちは新しい問題を見つけました.すべてのプログラマは手動でそれを行うことはありません.この問題を解決するミドルウェアを作ろう
URLを更新するミドルウェアNuxt
このテクニックの名前はわからない
私たちはすべての変更ルートをクエリURLを更新する必要があります、私たちはNuxt JSによって提供されるミドルウェアでこれを行うことができます.私たちは会社のIDを状態管理とURLに格納します.このような流れでミドルウェアを作ります.
ユーザーがルートを変更するたびに
クエリ会社のIDを含む新しいURLにユーザーをリダイレクトする
ブラウザがページをリフレッシュするたびに、状態管理がリセットされ、URLクエリ会社IDから復元する必要があります
現在、我々はURLの上でパラメタユーザの会社IDを固守します.
ミドルウェアコード
まず第一に、我々は会社のIDのための国家管理を作成する必要があります.これはcompanystoreです.js
export const state = () => ({
companyId: null
})
export const mutations = {
setCompanyId(state:any, companyId:string){
state.companyId = labId
}
}
Create new middleware called authApp.ts in folder middleware (if there is no folder middleware, create one).
import { Context } from "@nuxt/types"
export const companyId = "companyId"
/**
* this middleware make apps to require query `companyId`
* ex: /home/?companyId=123-24123-4123
*/
export default function(context:Context){
let excludeRoute = [
"/login",
"/login/app"
]
let companyIdQuery = context.query[companyId]
let companyIdStore = context.store.state.companyStore[companyId]
if(!companyIdQuery){
if(companyIdStore){
return context.redirect(context.route.path + "?companyId=" + companyIdStore)
}
if(!excludeRoute.includes(context.route.path)){
return context.redirect('/login/app');
}
}
else {
if(!companyIdStore){
context.store.commit('companyStore/setcompanyId', companyIdQuery)
} else {
if(companyIdStore !== companyIdQuery){
context.store.commit('companyStore/setcompanyId', companyIdQuery)
}
}
}
}
company idがNULLの場合は、ルートのリダイレクトとして配列のexcludeouteを追加します.最後に、このミドルウェアを
<a href />
に登録してくださいrouter: {
middleware: ['authApp', ...]
},
あなたは、$ルートまたは$ Storeから会社IDを得ることができますlet companyIdStore = this.$store.state.companyStore.companyId
let companyIdRoute = this.$route.query.companyId
仕上げそれは私がこの問題を解決する方法ですが、私は別の記事Nuxtについては、このような持続性の状態を作成するために書いて発見したので、私は1つを作成します.このヘルプはあなたを助ける.
Reference
この問題について(URL Nuxt JSへのストア持続状態), 我々は、より多くの情報をここで見つけました https://dev.to/riochndr/store-persist-state-to-url-nuxt-js-3klaテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol