# 前后端分离

本项目使用前后端分离的开发模式,前端负责数据展示与用户交互,后端负责提供数据接口,前后端通过 API 进行数据交互。

本项目使用 jwt 解决前后端通信身份验证问题。

# 原理

用户通过账号密码登录时,后端校验成功后通过秘钥对用户id等信息进行加密生成一个具有时效性的 token 返回给前端。前端每次调用接口时,在接口 header 中携带该 token,后端接受后使用秘钥对其解密获取用户信息,若未被篡改,则可确认是该用户操作。

# 本项目中

本项目中接口 header 中均可携带 token ,若接口无需鉴权,会忽略该 token
对于有些可携带可不携带的接口,如影视详情接口,登录用户可获取本人是否收藏、评分等信息;若未登录,则不会返回这些信息;若 token 失效,则按未登录处理。

# 相关代码

# login 接口

// 在 vuex 的 user module 中,登录成功后会将 token 信息写入 vuex
async login({ commit }, form) {
	const { account, password } = form

	const res = await getUserToken({ account, password })

	if (res.code === 200) {
		commit('SET_TOKEN', res.data.token)
	}
	return res
},

// 写入 Token 信息到本地与 vuex 中
SET_TOKEN: (state, token) => {
	state.token = token
	localStorage.setItem('token', token)
},

# axios 配置

// 在请求拦截器中,如果 `vuex` 中存在 token ,则请求时携带上
// 注意,Bearer 后面用户 token 连接处有一个空格
axios.interceptors.request.use(config => {
	if (store.state.user.token) {
		config.headers['Authorization'] = 'Bearer ' + store.state.user.token
	}
	return config
}, function (error) {
	return Promise.reject(error)
})
上次更新: 1/31/2023, 6:11:55 PM
示例展示,因PC端无touch事件,请在手机上进行浏览