From 0f344a4d7e19e80e2a79879706b9b2ee3f20afae Mon Sep 17 00:00:00 2001
From: Gao xiaosong <704041637@qq.com>
Date: Tue, 2 Jun 2020 02:34:01 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=99=BB=E5=BD=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
libs/login.js | 6 +-
pages/Loading/index.vue | 21 +-
pages/authorization/index.vue | 351 +++++++++++++++++-----------------
utils/index.js | 186 +++++++++---------
4 files changed, 282 insertions(+), 282 deletions(-)
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)