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
- python爬蟲如何用session保持登入?Python爬蟲Session
- python+pytest介面自動化(9)-cookie繞過登入(保持登入狀態)PythonCookie
- 【開發必備】單點登入,清除了cookie,頁面還保持登入狀態?Cookie
- 爬蟲如何利用session方法保持登陸狀態(selenium)爬蟲Session
- puppeteer chrome/chrome canary 登入瀏覽器Chrome瀏覽器
- golang 模擬瀏覽器登入操作Golang瀏覽器
- 微信登入+商品瀏覽
- 帝國cms登入後臺提示“登入成功”,接著又提示“您還未登入”
- Vue管理系統前端系列三登入頁和首頁及`vuex`管理登入狀態Vue前端
- 視訊直播系統原始碼,登入平臺後在首頁保持長時間亮屏狀態原始碼
- 基於 Session 實現簡訊登入Session
- 怎麼登入遠端伺服器 遠端登入VPS伺服器伺服器
- session與登入機制Session
- express+vue+mongodb+session 實現註冊登入ExpressVueMongoDBSession
- TFS 瀏覽器端IP訪問登入後跳轉到機器名地址問題的解決方法瀏覽器
- ubuntu16.04登入後,只顯示桌面背景(無啟動器欄(Launcher)無狀態列)的問題解決...Ubuntu
- 織夢後臺登入成功又跳轉回登入介面與驗證碼
- Auth Session 退出他人正登入的賬號、passport 退出登入SessionPassport
- App 第三方登入獲取使用者資訊 支付寶登入後端程式碼參考APP後端
- 斐訊(PHICOMM)路由器登入網址 斐訊(PHICOMM)路由器登入入口路由器
- 【網頁登入】QQ 登入、微信登入、微博登入、GitHub 登入網頁Github
- Flask Session 登入認證模組FlaskSession
- Java Servlet session實現登入退出JavaServletSession
- jwt與session的登入鑑權JWTSession
- ES和kibana docker啟動成功後瀏覽器卻顯示無法訪問Docker瀏覽器
- vue實現登入和個人資訊元件展示Vue元件
- 登入學習通報錯:瀏覽器沒有開啟cookie功能瀏覽器Cookie
- 如何關閉win10登入介面_win10不顯示登入介面的方法Win10
- 手機 via瀏覽器 無法登入 此瀏覽器或應用可能不安全。 瞭解詳情 請嘗試使用其他瀏覽器。如果您使用的是受支援的瀏覽器 可以重新嘗試登入。瀏覽器
- Springboot中登入後關於cookie和session攔截案例Spring BootCookieSession
- 瀏覽器輸入URL回車後...瀏覽器
- 登入觸發器不生效,只在alert日誌中顯示觸發器
- 微信登入外掛
- 解決 PBootCMS 後臺登入不顯示驗證碼的問題boot
- 小程式初始化載入,根據登入狀態判斷跳轉首頁還是登入頁
- PbootCMS後臺登陸密碼忘記/找回後臺登入密碼外掛boot密碼
- vnc登入,vnc遠端登入工具的使用方法VNC