Vue.js 가 SPA 로그 인 페이지 를 실현 하 는 과정[추천]
일반적인 로그 인 과정 에서 전단 방안 은:
그 전에 로그 인 페이지 의 경로 가/login 이 라 고 가정 하고 로그 인 후의 경 로 는/user 입 니 다.info。이렇게 하면 App.vue 에 router-view 를 놓 아서 이 두 가지 경 로 를 저장 하고 렌 더 링 할 수 있 습 니 다.
// component/App.vue
<template>
<div class="container" id="app">
<transition name="fade">
<keep-alive>
<router-view></router-view>
</keep-alive>
</transition>
</div>
</template>
...
vue-router 설정 을 잘 합 니 다:
// js/app.js
import Vue from 'vue'
import VueRouter from 'vue-router'
import Login from '../component/Login.vue'
import UserInfo from '../component/UserInfo.vue'
Vue.use(VueRouter);
const router = new VueRouter({
routes: [{
path: '/login',
component: Login
}, {
path: '/user_info',
component: UserInfo
}]
})
...
상태 와 점프 검사두 시간 동안 우 리 는 상 태 를 검사 해 야 한다.1.사용자 가 페이지 를 열 때;2.경로 가 변 할 때;
우선 로그 인 상 태 를 확인 하 는 방법 checkLogin 을 작성 해 야 합 니 다.
// js/app.js
...
var app = new Vue({
data: {},
el: '#app',
render: h => h(App),
router,
store,
methods:{
checkLogin(){
// session
//cookie
if(!this.getCookie('session')){
//
this.$router.push('/login');
}else{
//
this.$router.push('/user_info');
}
}
}
})
사용자 체험 을 향상 시 키 기 위해 서 는 사용자 가 페이지 를 열 때 전단 에 로그 인 했 는 지 확인 해 야 합 니 다.사용자 가 다시 로그 인 할 필요 가 없습니다.이 실현 은 매우 간단 합 니 다.우 리 는 vue 인 스 턴 스 의 created 갈고리 에 썼 습 니 다.
// js/app.js
...
var app = new Vue({
...
created() {
this.checkLogin();
},
methods:{
checkLogin(){
...
}
}
})
또한 경로 가 바 뀌 었 을 때 도 로그 인 을 확인 해 야 합 니 다.다음 상황(경로 변화)에서 로그 인 상 태 를 검사 하지 않 으 면 오류 가 발생 할 수 있 습 니 다.
// js/app.js
...
var app = new Vue({
...
//
watch:{
"$route" : 'checkLogin'
},
//
created() {
this.checkLogin();
},
methods:{
checkLogin(){
...
}
}
})
이로써 우 리 는 일반적인 과정의 첫 단 계 를 마 쳤 다.다음은 사용자 의 개인 정 보 를 어떻게 얻 는 지 실현 한다.사용자 정보 가 져 오기
로그 인 에 성공 한 후에 저 희 는 보통 백 엔 드 에서 사용자 의 정 보 를 표시 해 야 합 니 다.예 를 들 어 닉네임,프로필 사진,등급 등 입 니 다.가 져 오 면 간단 합 니 다.http 요청 을 보 내 백 엔 드 에서 가 져 오 십시오.그러나 일반적으로 이러한 정 보 는 여러 경로 에서 사 용 됩 니 다(예 를 들 어 uid 는 각 백 엔 드 인터페이스 에서 매개 변수 로 사용 해 야 합 니 다).따라서 전체 상태 에 저장 해 야 합 니 다(vuex).
// component/App.vue
...
<script>
export default {
...
mounted(){
//
this.getUserInfo();
},
methods: {
//
getUserInfo(){
this.userInfo = {
nick: 'Doterlin',
ulevel: 20,
uid: '10000',
portrait: 'images/profile.png'
}
//
ts.$http.get(url, {
//
"params": this.userInfo
}).then((response) => {
//Success
if(response.data.code == 0){
this.$store.commit('updateUserInfo', this.userInfo);
}
}, (response) => {
//Error
});
}
}
}
</script>
...
물론 우 리 는 이전에 설정 해 야 합 니 다.예 를 들 어 app.js 에 쓰 거나 store.js 로 단독으로 쓰 고 app.js 에 도입(추천)해 야 합 니 다.
// js/app.js
// Vuex
...
const store = new Vuex.Store({
state: {
domain:'http://test.example.com', // , ( )
userInfo: { //
nick: null,
ulevel: null,
uid: null,
portrait: null
}
},
mutations: {
//
updateUserInfo(state, newUserInfo) {
state.userInfo = newUserInfo;
}
}
})
...
로그 인 요청 을 입력 하고 보 내기예상 치 못 한 문자 와 잦 은 요청 이 백 엔 드 로 전달 되 는 것 을 방지 하기 위해 서 는 전단 에서 사용자 의 입력 을 검사 하고 중복 요청 을 방지 해 야 합 니 다.물론 서로 다른 사이트 의 합 법 적 인 문자 가 다 릅 니 다.여 기 는 비어 있 을 때 만 합 법 적 이지 않 은 검사 입 니 다.
//component/Login.vue
<template>
<div class="login" id="login">
...
<div class="log-email">
<input type="text" placeholder="Email" :class="'log-input' + (account==''?' log-input-empty':'')" v-model="account"><input type="password" placeholder="Password" :class="'log-input' + (password==''?' log-input-empty':'')" v-model="password">
<a href="javascript:;" rel="external nofollow" class="log-btn" @click="login">Login</a>
</div>
...
</div>
</template>
<script>
import Loading from './Loading.vue'
export default {
name: 'Login',
data(){
return {
isLoging: false,
account: '',
password: ''
}
},
components:{
Loading
},
methods:{
//
login(){
if(this.account!='' && this.password!=''){
this.toLogin();
}
}
}
</script>
...
여기 this.toLogin 은 로그 인 요청 방법 입 니 다.post 비밀 번 호 를 백 엔 드 에 직접 보 내지 않 고 백 엔 드 에서 정 한 규칙 에 따라 암호 화 한 후에 보 냅 니 다.예 를 들 어 해시 알고리즘,예 를 들 어 이중 해시 암호 화 를 실 시 했 습 니 다.js/sha1.min.js 를 참조 하여 대체적으로 다음 과 같 습 니 다.
...
//
toLogin(){
//
// ./js/sha1.min.js
let password_sha = hex_sha1(hex_sha1( this.password ));
//
let loginParam = {
account: this.account,
password_sha
}
//
this.isLoging = true;
//
this.$http.post( 'example.com/login.php', {
param: loginParam).then((response) => {
if(response.data.code == 1){
//
let expireDays = 1000 * 60 * 60 * 24 * 15;
this.setCookie('session', response.data.session, expireDays);
//
this.$router.push('/user_info');
}
}, (response) => {
//Error
});
...
이렇게 해서 3,4,5 단계 가 완성 되 었 다.마지막 단 계 는 로그아웃 이다.말소 하 다
로그아웃 할 때 요청 이 필요 한 백 엔 드 가 있 습 니 다.중요 한 것 은 저 장 된 로그 인 상 태 를 삭제 하 는 것 입 니 다.
// component/UserInfo.vue
...
logout(){
// cookie
this.isLogouting = true;
// , logout.php
// this.$http.post('eaxmple.com/logout.php')...
// cookie
this.delCookie('session');
// loding
this.isLogouting = false;
//
this.$router.push('/login/');
}
...
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Fastapi websocket 및 vue 3(Composition API)1부: FastAPI virtualenv 만들기(선택 사항) FastAPI 및 필요한 모든 것을 다음과 같이 설치하십시오. 생성main.py 파일 및 실행 - 브라우저에서 이 링크 열기http://127.0.0.1:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.