vue項目 單點登錄 需要進行訪問固定地址且帶有.html(客戶指定地址不能進行修改)後綴的路徑獲取token以傳到第三方api來獲取有效可以

vue寫的項目 中做單點登錄 獲取token需要通過客戶的固定地址https://XXXX.XX.XX.XX:8081/ombs/pages/gatemsg.html?appid=6&token=V1uRstCQVCR2Am64YDH6BEn(其中ombs/pages/gatemsg.html這個路徑不能動)來獲取token,再將token傳到第三方api來獲取一個有效的key,才能進行後續操作,但是項目中的vue-router直接配置path:'ombs/pages/gatemsg.html’本地開發不會報錯放到線上就會報錯解析錯誤,其他頁面訪問均正常,我猜測是nginx下訪問無法解析vue-route配置帶.html後綴路徑
解決辦法:再服務器上配置nginx去將路徑重定向並把token傳過來,在vue-router路由鉤子裏面去進行判斷

主要思路就是在nginx去將https://XXXX.XX.XX.XX:8081/ombs/pages/gatemsg.html?appid=6&token=V1uRstCQVCR2Am64YDH6BEn進行重定向

vue-router
import Vue from 'vue'
import Router from 'vue-router'
import axios from 'axios'
import store from '@/store/store.js'
Vue.use(Router)

const login=r=>require.ensure([],()=>r(require('@/pages/auth/login/login')))
var router = new Router({
  mode: 'history',
  routes: [
    {
      path: '/login',
      name: 'login',
      component: login
    },{
      path: '/single_sign_on'
    },
    ]
})
// 配置路由權限
router.beforeEach((to, from, next) => {
    let getTokenPath=to.path
    console.log(to.path)
    if(getTokenPath === '/single_sign_on'){//判斷是否是固定的權限訪問授權路由
        let token = to.query.token
        let appid = to.query.appid
        if(token){
            // 通過 token 訪問第三方api 獲取有效key進入首頁並將key存入localstorage 否則進入login
            axios.get('/inapi/login/index',{
                params:{
                    token:token,
                    appid:appid
                }}).then(res => {
                    if(res.data.code === 0){
                        store.commit('set_xaiot_token_key',res.data.data.role)
                        next('/')
                    }else{
                        store.commit('set_xaiot_token_key','')
                        next('/login')
                    }
            }).catch(res => {
                console.log(res.data.msg,'error')
                store.commit('set_xaiot_token_key','')
                next('/login')
            })
        }else{
            store.commit('set_xaiot_token_key','')
            next('/login')
        }
    }
    let xaiot_token_key=store.state.xaiot_token_key
    if (to.meta.requireAuth) { // 判斷該路由是否需要登錄權限
        if (xaiot_token_key) { // 判斷本地是否存在access_token
            next()
        } else {
            // 未登錄,跳轉到登陸頁面,並且帶上 將要去的地址,方便登陸後跳轉。
            store.commit('set_xaiot_token_key','')
            next('/login')
        }
    } else {
        next()
    }
  })
export default router

nginx.cof

server {
    # HTTP configuration
    listen 80 default_server;
    #listen [::]:80 default_server;

    # HTTPS configuration
    #listen 443 ssl default_server;
    #listen [::]:443 ssl default_server;
    #ssl_certificate        /etc/certs/server.crt;
    #ssl_certificate_key    /etc/certs/server.key;

    server_name _;
    charset utf-8;

    location / {
        root html;
        index index.html index.htm;
        try_files $uri $uri/ /index.html;
    }

    location /ombs/pages {
        alias html/ombs/pages/;
        index gatemsg.html;
    }

    location /inapi/ {
        #add_header 'Access-Control-Allow-Origin' '*';
        #add_header 'Access-Control-Allow-Credentials' 'true';
        #add_header 'Access-Control-Allow-Methods' '*';
        proxy_pass http://172.18.0.125:3000/mock/62/xaiot-oss/api/inapi/;
    }
}

gatemsg.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title></title>
</head>
<body>
    <script>
        let searchHref = window.location.search.replace('?', '');
        let params = searchHref.split('&');
        let returnParam = {};
        params.forEach(function(param) {
            let paramSplit = param.split('=');
            returnParam[paramSplit[0]] = paramSplit[1];
        });
        if (typeof(returnParam.token) !="undefined" )
            window.location.href = `/single_sign_on?appid=6&token=${returnParam.token}`
        else
            window.location.href = `/single_sign_on`
    </script>
</body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章