Vue外賣十一:登入成功資訊顯示、瀏覽器cookie+後端session登入狀態保持
一、登入後顯示
1)Msite.vue頭部登入後資訊
<TopHeader :title='address.name'>
<!-- 【1】點圖示跳轉到搜尋頁 -->
<router-link to="/search" class="header_search" slot='left'>
<i class="iconfont icon-sousuo"></i>
</router-link>
<!-- 【3】狀態中有使用者id說明已登入,跳轉到個人中心,否則跳轉到登入頁 -->
<router-link :to=" userInfo._id ? '/profile':'/login'" class="header_login" slot='right'>
<!-- 【4】未登入顯示登入,否則顯示個人中心小圖示 -->
<span class="header_login_text" v-if="!userInfo._id">
登入|註冊
</span>
<span class="header_login_text" v-else>
<i class="iconfont icon-person"></i>
</span>
</router-link>
</TopHeader>
import {mapState} from 'vuex' //1呼叫vuex管理的狀態
computed:{
//把vuex管理的狀態:地址/滑動導航分類解構到當前位置
/*mapState返回的值:函式(物件)引數來自store/state.js*/
// 【2】讀取狀態中的使用者資訊
...mapState(['address','categorys','userInfo']),
略過...
}
效果:http://localhost:8080/
左:跳轉到搜尋 右:由註冊變圖示,點跳轉到個人中心
2)profile.vue登入後資訊
<!-- 【2】如果已經登入,則跳轉到個人資料,否則跳轉到登入頁面 -->
<router-link :to="userInfo._id ? '/user_info' : '/login'" class="profile-link">
<div class="profile_image">
<i class="iconfont icon-person"></i>
</div>
<div class="user-info">
<!-- 沒有手機號則顯示使用者名稱或登入註冊 -->
<p class="user-info-top" v-if="!userInfo.phone">{{userInfo.name || '登入/註冊' }}</p>
<p>
<span class="user-icon">
<i class="iconfont icon-shouji icon-mobile"></i>
</span>
<span class="icon-mobile-number">{{userInfo.phone || '暫無繫結手機號'}}</span>
</p>
</div>
<span class="arrow">
<i class="iconfont icon-jiantou1"></i>
</span>
</router-link>
import {mapState} from 'vuex'
export default{
computed:{
//讀取狀態中的userInfo
...mapState(['userInfo'])
}
}
效果:http://localhost:8080/#/profile
二、保持登入狀態
原理:cookie結合後端session保持登入
保持登入詳:https://blog.csdn.net/a754895/article/details/82632747
a.根目錄/app.js 使用session設定cookie的會話時間為一天
app.use(session({
secret: '12345',
//設定maxAge是80000ms,即80s後session和相應的cookie失效過期
cookie: {maxAge: 1000*60*60*24 },
resave: false,
saveUninitialized: true,
}));
b.routes/index.js
重點:從此處開始:UserModel.findOne(
/*
密碼登陸
*/
router.post('/login_pwd', function (req, res) {
const name = req.body.name
const pwd = md5(req.body.pwd)
const captcha = req.body.captcha.toLowerCase()
console.log('/login_pwd', name, pwd, captcha, req.session)
// 可以對使用者名稱/密碼格式進行檢查, 如果非法, 返回提示資訊
if(captcha!==req.session.captcha) {
return res.send({code: 1, msg: '驗證碼不正確'})
}
// 刪除儲存的驗證碼
delete req.session.captcha
UserModel.findOne({name}, function (err, user) {
if (user) {
console.log('findUser', user)
if (user.pwd !== pwd) {
res.send({code: 1, msg: '使用者名稱或密碼不正確!'})
} else {
req.session.userid = user._id
res.send({code: 0, data: {_id: user._id, name: user.name, phone: user.phone}})
}
} else {
const userModel = new UserModel({name, pwd})
userModel.save(function (err, user) {
// 向瀏覽器端返回cookie(key=value)
// res.cookie('userid', user._id, {maxAge: 1000*60*60*24*7})
req.session.userid = user._id
const data = {_id: user._id, name: user.name}
// 3.2. 返回資料(新的user)
res.send({code: 0, data})
})
}
})
})
1)src/api/index.js
// 9、根據會話獲取使用者資訊
export const reqUserInfo = () => ajax(BASE_URL+'/userinfo')
2)src/store/state.js
userInfo: {}, // 使用者資訊
3)mutation-types.js
export const RECEIVE_USER_INFO = 'receive_user_info' // 接收使用者資訊
4)mutations.js
import {RECEIVE_USER_INFO} from './mutation-types.js'
export default{
[RECEIVE_USER_INFO](state,{userInfo}){state.userInfo=userInfo},
}
5)src/store/actions.js
// 控制mutations
import {
...略過
RECEIVE_USER_INFO,
} from './mutation-types.js'
import {
...略過
reqUserInfo, //獲取session的使用者資訊
} from '../api/index.js'
export default{
//非同步獲取自session中的使用者資訊
async getUserInfo({commit}){
const result=await reqUserInfo()
if(result.code===0){
const userInfo=result.data
commit(RECEIVE_USER_INFO,{userInfo})
}
},
}
6)app.vue
頁面載入時,發起一次獲取使用者資訊請求,實現登入保持
//【0】引入vuex的action
import {mapActions} from 'vuex'
export default{
mounted(){
/* 呼叫actions方法1:getAddress來源actions.js
this.$store.dispatch('getAddress')*/
// 【1】呼叫actions方法2:
this.getAddress()
this.getUserInfo()
},
methods:{
// 【2】呼叫actions方法2:把getAddress方法解構到當前位置
// mapActions() 返回的是一個物件,
// 用了 ... 擴充套件符後,才可以放進一個物件裡,
// 和其他元件內定義的 method 在同一個 methods 物件。
// 引數來自:store/actions.js內的方法
...mapActions(['getAddress','getUserInfo'])
}
}
效果:登入成功之後,一天內無論是重新整理還是關閉瀏覽器重新進網站都會保持登入狀態
相關文章
- requests請求狀態保持-登入github為例Github
- 【開發必備】單點登入,清除了cookie,頁面還保持登入狀態?Cookie
- 微信登入+商品瀏覽
- puppeteer chrome/chrome canary 登入瀏覽器Chrome瀏覽器
- golang 模擬瀏覽器登入操作Golang瀏覽器
- python+pytest介面自動化(9)-cookie繞過登入(保持登入狀態)PythonCookie
- python爬蟲如何用session保持登入?Python爬蟲Session
- Win10系統設定登入時顯示上次登入資訊的方法Win10
- 爬蟲如何利用session方法保持登陸狀態(selenium)爬蟲Session
- 帝國cms登入後臺提示“登入成功”,接著又提示“您還未登入”
- Vue管理系統前端系列三登入頁和首頁及`vuex`管理登入狀態Vue前端
- ASP.NET程式單客戶端(瀏覽器)登入的實現方案ASP.NET客戶端瀏覽器
- win10系統登入介面顯示上一次登入資訊的設定步驟Win10
- 怎麼登入遠端伺服器 遠端登入VPS伺服器伺服器
- TFS 瀏覽器端IP訪問登入後跳轉到機器名地址問題的解決方法瀏覽器
- 織夢後臺登入成功又跳轉回登入介面與驗證碼
- session與登入機制Session
- express+vue+mongodb+session 實現註冊登入ExpressVueMongoDBSession
- ubuntu16.04登入後,只顯示桌面背景(無啟動器欄(Launcher)無狀態列)的問題解決...Ubuntu
- 【網頁登入】QQ 登入、微信登入、微博登入、GitHub 登入網頁Github
- 微信登入外掛
- 視訊直播系統原始碼,登入平臺後在首頁保持長時間亮屏狀態原始碼
- Auth Session 退出他人正登入的賬號、passport 退出登入SessionPassport
- vue實現登入和個人資訊元件展示Vue元件
- Flask Session 登入認證模組FlaskSession
- 編寫session過濾器時,session失效時,登入頁在頂層top中顯示show出的問題Session過濾器
- hosts引起hotmail登入頁面無法顯示AI
- Linux無法登入,顯示module is unknownLinux
- 如何關閉win10登入介面_win10不顯示登入介面的方法Win10
- SecureCRT遠端登入LINUX系統顯示亂碼的解決SecurecrtLinux
- App 第三方登入獲取使用者資訊 支付寶登入後端程式碼參考APP後端
- 登入學習通報錯:瀏覽器沒有開啟cookie功能瀏覽器Cookie
- 登入觸發器不生效,只在alert日誌中顯示觸發器
- 登入ftp伺服器的時候顯示421 Service not availableFTP伺服器AI
- 解決 PBootCMS 後臺登入不顯示驗證碼的問題boot
- 手機 via瀏覽器 無法登入 此瀏覽器或應用可能不安全。 瞭解詳情 請嘗試使用其他瀏覽器。如果您使用的是受支援的瀏覽器 可以重新嘗試登入。瀏覽器
- 瀏覽器輸入URL回車後...瀏覽器
- vnc登入,vnc遠端登入工具的使用方法VNC