vue+koa+mysqlエンタープライズ管理バックグラウンド
1、ドメイン間セッションの失効問題原因:ドメイン間リクエスト、デフォルトではクッキーを携帯させないため、サービス側で設定されたセッションを取得できない(同じgetリクエストで取得でき、同じpostで取得できるが、getで設定されたセッションはpostでは取得できない)解決方法:vueフロントリクエストブロッカーでwithCredentials=trueを設定する
koaバックグラウンドでドメイン間パラメータを設定する
2、jwtを使用してログイン検証を行い、anthorization error 401エラー原因:先にjwt検証を行い、ドメイン間処理を行い、正しい順序は先にドメイン間処理を行ってから検証処理とjwt処理を行うべきである
// request
service.interceptors.request.use(config => {
if (store.getters.token) {
config.headers['X-Token'] = getToken() // token
}
config.withCredentials = true // cookie
return config
}, error => {
console.log('lan')
// Do something with request error
console.log(error) // for debug
Promise.reject(error)
})
koaバックグラウンドでドメイン間パラメータを設定する
const cors = require('koa2-cors');
app.use(cors({
origin: function (ctx) {
return 'http://localhost:9528';//
},
exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'],
maxAge: 5,
credentials: true,
allowMethods: ['GET', 'POST'],
allowHeaders: ['Content-Type', 'Authorization', 'Accept'],
}))
2、jwtを使用してログイン検証を行い、anthorization error 401エラー原因:先にjwt検証を行い、ドメイン間処理を行い、正しい順序は先にドメイン間処理を行ってから検証処理とjwt処理を行うべきである
npm i jsonwebtoken --save
npm i koa-jwt --save
const err = require('./middlreware/error');
// error,js
const jwt = require('jsonwebtoken')
const config = require('../config/config')
const util = require('util')
const verify = util.promisify(jwt.verify)
/**
* token
*/
module.exports = function () {
return async function (ctx, next) {
try {
const token = ctx.header.authorization // jwt
if(token) {
let payload
try {
payload = await verify(token.split(' ')[1], config.session.sign) // payload, ID
ctx.user = {
name: payload.name,
id: payload.id
}
} catch (err) {
console.log('token verify fail: ', err)
}
}
console.log(`token: ${token}`)
await next()
} catch (err) {
if (err.status === 401) {
ctx.body = {
code: -1,
message: ' '
}
} else {
err.status = 404
ctx.body = '404'
console.log(' :', err)
}
}
}
}
//
app.use(err())
app.use(jwtKoa({secret: config.session.sign}).unless({
path: [/^\/api\/login/,/^\/api\/login\/getCaptcha/] // jwt
}))