You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.0 KiB
79 lines
2.0 KiB
|
7 years ago
|
import { routerRedux } from 'dva/router';
|
||
|
|
import { stringify } from 'qs';
|
||
|
|
import { fakeAccountLogin, getFakeCaptcha } from '@/services/api';
|
||
|
|
import { setAuthority } from '@/utils/authority';
|
||
|
|
import { getPageQuery } from '@/utils/utils';
|
||
|
|
import { reloadAuthorized } from '@/utils/Authorized';
|
||
|
|
|
||
|
|
export default {
|
||
|
|
namespace: 'login',
|
||
|
|
|
||
|
|
state: {
|
||
|
|
status: undefined,
|
||
|
|
},
|
||
|
|
|
||
|
|
effects: {
|
||
|
|
*login({ payload }, { call, put }) {
|
||
|
|
const response = yield call(fakeAccountLogin, payload);
|
||
|
|
yield put({
|
||
|
|
type: 'changeLoginStatus',
|
||
|
|
payload: response,
|
||
|
|
});
|
||
|
|
// Login successfully
|
||
|
|
if (response.status === 'ok') {
|
||
|
|
reloadAuthorized();
|
||
|
|
const urlParams = new URL(window.location.href);
|
||
|
|
const params = getPageQuery();
|
||
|
|
let { redirect } = params;
|
||
|
|
if (redirect) {
|
||
|
|
const redirectUrlParams = new URL(redirect);
|
||
|
|
if (redirectUrlParams.origin === urlParams.origin) {
|
||
|
|
redirect = redirect.substr(urlParams.origin.length);
|
||
|
|
if (redirect.match(/^\/.*#/)) {
|
||
|
|
redirect = redirect.substr(redirect.indexOf('#') + 1);
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
window.location.href = redirect;
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
yield put(routerRedux.replace(redirect || '/'));
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
*getCaptcha({ payload }, { call }) {
|
||
|
|
yield call(getFakeCaptcha, payload);
|
||
|
|
},
|
||
|
|
|
||
|
|
*logout(_, { put }) {
|
||
|
|
yield put({
|
||
|
|
type: 'changeLoginStatus',
|
||
|
|
payload: {
|
||
|
|
status: false,
|
||
|
|
currentAuthority: 'guest',
|
||
|
|
},
|
||
|
|
});
|
||
|
|
reloadAuthorized();
|
||
|
|
yield put(
|
||
|
|
routerRedux.push({
|
||
|
|
pathname: '/user/login',
|
||
|
|
search: stringify({
|
||
|
|
redirect: window.location.href,
|
||
|
|
}),
|
||
|
|
})
|
||
|
|
);
|
||
|
|
},
|
||
|
|
},
|
||
|
|
|
||
|
|
reducers: {
|
||
|
|
changeLoginStatus(state, { payload }) {
|
||
|
|
setAuthority(payload.currentAuthority);
|
||
|
|
return {
|
||
|
|
...state,
|
||
|
|
status: payload.status,
|
||
|
|
type: payload.type,
|
||
|
|
};
|
||
|
|
},
|
||
|
|
},
|
||
|
|
};
|