123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- import config from '@/common/config.js'
- import {
- isWechat, objToUrlQuery
- } from '@/util/squ.js'
- import {
- getCurQuery, getCurQueryAll, routeWithParams, getStorageSync, toast
- } from '@/util/squni.js'
- import {
- post
- } from '@/util/request.js'
- import store from '@/store'
- export const LoginAlready = 'LoginAlready'
- export const LoginSuccess = 'LoginSuccess'
- export const LoginUnBind = 'LoginUnBind'
- export const LoginRedirect = 'LoginRedirect'
- export const LoginError = 'LoginError'
- // 开始登录
- export const login = (force) => {
- return new Promise((resolve) => {
- if (!force && getStorageSync('token')) {
- console.debug('本地已存在token, 则认为已经登录')
- resolve(LoginAlready)
- return
- }
-
- // #ifdef H5
- const accessToken = getCurQuery('accessToken')
- if (!force && accessToken) {
- console.debug('请求参数中包含accessToken, 则认为登录成功')
- store.commit('setToken', accessToken)
- resolve(LoginSuccess)
- } else if (config.appIdWxMp && isWechat()) {
- h5WxLogin().then((res) => {
- resolve(res)
- })
- } else {
- h5Login().then((res) => {
- resolve(res)
- })
- }
- // #endif
- // #ifdef MP-WEIXIN
- // 获取进入不同平台的登录方法
- uni.getProvider({
- service: 'oauth',
- success: function(res) {
- // 当前只做微信小程序
- if (~res.provider.indexOf('weixin')) {
- uni.login({
- provider: 'weixin',
- success: function(loginRes) {
- // 前端获取到微信登录临时码,传至后台换openId和sessionId
- let code = loginRes.code
- doLogin('WxMa', { code }).then((wxRes) => {
- resolve(wxRes)
- })
- },
- })
- }
- },
- })
- // #endif
- })
- }
- // 请求后台登录
- export const doLogin = (loginType, params) => {
- return new Promise((resolve) => {
- let inviterUserId = getCurQuery('inviterUserId')
- console.debug(`请求登录. inviterUserId=${inviterUserId || ''}`)
- post(`/core/user/login?loginType=${loginType}`, Object.assign({}, {
- appid: config[`appId${loginType}`],
- inviterUserId: inviterUserId,
- autoRegister: 'true'
- }, params)).then((res) => {
- console.log(res);
- if (res.status === 'success') {
- // 调用成功,根据是否有token判断跳转的页面
- let data = res.data
- store.commit('setOpenid', data.openid)
- if (data.tokenInfo) {
- // tokenInfo不为空,可直接进入首页
- console.debug('登录成功. loginType=' + loginType)
- store.commit('setToken', data.tokenInfo.tokenValue)
- store.commit('setRefreshToken', data.refreshToken)
- resolve(LoginSuccess)
- } else {
- console.debug('登录失败. loginType=' + loginType + ", openid=" + data.openid)
- resolve(LoginUnBind)
- }
- } else {
- resolve({ status: LoginError, data: res})
- }
- })
- })
- }
- // H5微信登录(公众号)
- export const h5WxLogin = () => {
- const code = getCurQuery('code')
- if (!code) {
- console.debug('微信公众号登录. 不包含code,需进行用户授权')
- // 授权获取openid
- const redirectUri = encodeURIComponent(window.location.href)
- const scope = 'snsapi_base' // snsapi_base snsapi_userinfo // 静默授权 用户无感知
- const state = 'sqbiz' // 自定义参数,回调时会带上
- const url =
- `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${config.appIdWxMp}&redirect_uri=${redirectUri}&response_type=code&scope=${scope}&state=${state}#wechat_redirect`
- window.location.href = url
- } else {
- console.debug('微信公众号登录. 包含code,执行登录')
- return doLogin('WxMp', { code })
- }
- }
- // H5登录
- export const h5Login = () => {
- routeWithParams(config.loginPath)
- return new Promise((resolve) => {
- resolve(LoginRedirect)
- })
- }
|