diff --git a/libs/login.js b/libs/login.js index e7c681a..ffafcbb 100644 --- a/libs/login.js +++ b/libs/login.js @@ -4,11 +4,11 @@ import cookie from "@/utils/store/cookie"; import { isWeixin, login, - replaceLogin, getCurrentPageUrl, getCurrentPageUrlWithArgs, parseQuery, replace, + routerPermissions, handleQrCode } from "@/utils"; @@ -41,11 +41,11 @@ export default function toLogin(push, backUrl) { }) } else { console.log('是扫描的砍价海报进来的,但是没有获取到参数') - replaceLogin() + routerPermissions() } } else { console.log('无特殊情况,重新登录') - replaceLogin() + routerPermissions() } store.commit("UPDATE_AUTHORIZATION", false); store.commit("UPDATE_AUTHORIZATIONPAGE", true); diff --git a/pages/Loading/index.vue b/pages/Loading/index.vue index 943f58f..42dc004 100644 --- a/pages/Loading/index.vue +++ b/pages/Loading/index.vue @@ -43,22 +43,23 @@ export default { } cookie.get("spread"); // this.toLaunch(); - if (this.$deviceType == 'app') { - // this.toLaunch(); - this.$yrouter.switchTab({ - path: '/pages/home/index', - }); - return + if (this.$deviceType == "app") { + // this.toLaunch(); + this.$yrouter.switchTab({ + path: "/pages/home/index" + }); + return; } - login({ - fail: () => { - this.toLaunch(); - } + login().finally(() => { + this.$yrouter.switchTab({ + path: "/pages/home/index" + }); }); }, methods: { ...mapActions(["changeAuthorization", "setUserInfo"]), toLaunch() { + console.log("loading home"); this.changeAuthorization(false); this.$yrouter.switchTab({ path: "/pages/home/index" diff --git a/pages/authorization/index.vue b/pages/authorization/index.vue index 880dc6d..0479a04 100644 --- a/pages/authorization/index.vue +++ b/pages/authorization/index.vue @@ -1,211 +1,218 @@ diff --git a/utils/index.js b/utils/index.js index 0e9dac6..d44e845 100644 --- a/utils/index.js +++ b/utils/index.js @@ -109,46 +109,6 @@ export const copyClipboard = (data) => { }) } - -export const replaceLogin = (msg) => { - uni.hideLoading(); - console.log('尝试开始重新登录') - uni.showToast({ - title: '重新登录中...', - icon: 'none', - duration: 2000 - }); - // 这里代表已经失去登录状态以及401强制推出登录了 - store.commit('LOGOUT') - if (Vue.prototype.$deviceType == 'routine') { - console.log('当前是微信小程序,开始调用登录方法') - // 如果是微信小程序,跳转到授权页 - login({ - fail: () => { - console.log('自动登录失败,重定向授权页面') - reLaunch({ - path: '/pages/authorization/index', - query: { - redirect: `/${getCurrentPageUrl()}`, - ...parseQuery() - } - }) - } - }) - - } else { - // 如果不是小程序跳转到登录页 - console.log('当前是app,跳转到登录页面') - push({ - path: '/pages/user/Login/index', - query: { - redirect: `/${getCurrentPageUrl()}`, - ...parseQuery() - } - }) - } -} - export const getProvider = (service) => { return new Promise((resolve, reject) => { // 获取当前环境的服务商 @@ -172,27 +132,26 @@ export const getProvider = (service) => { export const authorize = (authorizeStr) => { return new Promise((resolve, reject) => { + console.log('检验授权') uni.authorize({ scope: `scope.${authorizeStr}`, success() { + console.log('检验授权____授权成功') resolve('获取授权成功') }, fail() { - - console.log('授权失败跳转首页') - switchTab({ - path: '/pages/home/index', - // query - }); + console.log('检验授权____授权失败') + // switchTab({ + // path: '/pages/home/index', + // // query + // }); reject('获取授权失败') } }) - }).catch(error => { - console.log(error) }) } -export const login = (option) => { +export const login = () => { console.log('开始登录 ————————————————————') return new Promise((resolve, reject) => { console.log('获取环境商') @@ -215,62 +174,48 @@ export const login = (option) => { success: function (user) { console.log('获取用户信息成功') console.log('开始调用登录接口') - if (Vue.prototype.$deviceType == 'routine') { - wxappAuth({ - encryptedData: user.encryptedData, - iv: user.iv, - code: code, - spread: cookie.get("spread") - }).then(({ - data - }) => { - console.log('登录接口调用成功') - console.log('开始处理登录信息保存,并获取用户详情') - resolve(data) - uni.hideLoading(); - store.commit("LOGIN", data.token, dayjs(data.expires_time)); - store.dispatch('USERINFO', true) - console.log(store) - handleGetUserInfo() + wxappAuth({ + encryptedData: user.encryptedData, + iv: user.iv, + code: code, + spread: cookie.get("spread") + }).then(({ data }) => { + console.log('登录接口调用成功') + console.log('开始处理登录信息保存,并获取用户详情') + uni.hideLoading(); + store.commit("LOGIN", data.token, dayjs(data.expires_time)); + store.dispatch('USERINFO', true) + getUser().then(user => { + console.log('获取用户信息成功') + store.dispatch('setUserInfo', user.data) + resolve(user) }).catch(error => { - console.log('登录接口调用失败') - reject() - console.log(error) - handleFail(option, '微信登录失败') + console.log('获取用户信息失败') + reject('获取用户信息失败') }); - } + }).catch(error => { + console.log('登录接口调用失败') + reject('登录接口调用失败') + }); }, fail() { console.log('获取用户信息失败') - // 获取用户信息失败 - reject() - handleFail(option, '获取用户信息失败') + reject('获取用户信息失败') } }); }).catch(error => { console.log('用户未授权') - reject() - console.log(error) - handleFail(option, '用户未授权') + reject('用户未授权') }) }, fail() { console.log('调用登录接口失败') - // 调用登录接口失败 - reject() - handleFail(option, '登录失败') + reject('调用登录接口失败') } }); }).catch(error => { - handleFail(option, '获取环境服务商失败') - reject() - console.log(error) - handleFail(option, '获取环境服务商失败') + reject('获取环境服务商失败') }) - }).catch(error => { - handleFail(option, '登录失败') - console.log(error) - handleFail(option, '登录失败') }) } @@ -343,18 +288,13 @@ export const handleGetUserInfo = () => { }) } - -const handleFail = (option, msg) => { - // 此处是处理登录失效的问题的 - option && option.fail ? option.fail() : replaceLogin('登录失败,请重新登录') -} - export function parseUrl(location) { if (typeof location === 'string') return location const { path, query } = location + const queryStr = stringify(query) if (!queryStr) { @@ -419,6 +359,8 @@ export const handleLoginStatus = (location, complete, fail, success) => { // 是否可以访问 let isAuth = false + console.log('即将跳转', location, parseUrl(location)) + // 从 location 中获取当前url,location typeof string || object let path = '' if (typeof location === 'string') { @@ -427,6 +369,7 @@ export const handleLoginStatus = (location, complete, fail, success) => { path = location.path } + // 判断用户是否有token if (!auth()) { page.map((item) => { if (item.path == path) { @@ -439,7 +382,7 @@ export const handleLoginStatus = (location, complete, fail, success) => { return new Promise((resolve, reject) => { if (isAuth) { - // 登录了有权限 + // 有token resolve({ url: parseUrl(location), complete, @@ -447,8 +390,8 @@ export const handleLoginStatus = (location, complete, fail, success) => { success }) } else { - // 未登录没有权限 - replaceLogin() + // 没有token,先校验用户是否授权,如果授权了,进行自动登录 + routerPermissions(parseUrl(location)) reject() } }).catch(error => { @@ -456,6 +399,55 @@ export const handleLoginStatus = (location, complete, fail, success) => { }) } +// export function checkPermissions(){ + +// } + +export function routerPermissions(url) { + let path = url + if (!path) { + path = getCurrentPageUrlWithArgs() + } + if (Vue.prototype.$deviceType == 'routine') { + console.log('当前是微信小程序,开始处理小程序登录方法') + // 如果是微信小程序,跳转到授权页 + // 先校验用户是否授权,如果授权了,进行自动登录 + authorize('userInfo').then(() => { + // 自动登录 + login().then(res => { + // 登录成功,跳转到需要跳转的页面 + push({ + path, + }) + }).catch(error => { + uni.showToast({ + title: error, + icon: "none", + duration: 2000 + }); + reLaunch({ + path: '/pages/authorization/index', + }) + cookie.set('redirect', path) + }) + }).catch(error => { + // 跳转到登录页面或者授权页面 + reLaunch({ + path: '/pages/authorization/index', + }) + cookie.set('redirect', path) + }) + } else { + // 如果不是小程序跳转到登录页 + console.log('当前是app,开始处理app登录方法') + push({ + path: '/pages/user/Login/index', + }) + cookie.set('redirect', path) + } + +} + export function push(location, complete, fail, success) { handleLoginStatus(location, complete, fail, success).then(params => { uni.navigateTo(params)