Skip to content

Commit

Permalink
fix: 删除没有用到的Home页面 & 简化登陆请求和验证token请求
Browse files Browse the repository at this point in the history
  • Loading branch information
ChenlingasMx committed Apr 26, 2023
1 parent e6bb61d commit 78641e1
Show file tree
Hide file tree
Showing 8 changed files with 104 additions and 123 deletions.
49 changes: 38 additions & 11 deletions HelloWorld/src/hooks/users.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import {Alert} from 'react-native';
import { Alert } from 'react-native';
import AsyncStorage from '@react-native-async-storage/async-storage';
import {userLogin, userAuth} from '../services/users';
import {useQuery, useMutation} from 'react-query';
import { userLogin, userAuth } from '../services/users';
import { useQuery, useMutation } from 'react-query';
import Global from '../global';
import conf from '../config';
import { useSelector, useDispatch } from 'react-redux'
// 登录
export const login = ({config = {}, update, formData, remember}) => {
export const login = ({ config = {}, update, remember }) => {
const mutation = useMutation({
mutationFn: userLogin,
onSuccess: async data => {
Expand All @@ -16,7 +17,7 @@ export const login = ({config = {}, update, formData, remember}) => {
await AsyncStorage.setItem('cachPassword', formData.password);
}
await AsyncStorage.setItem('userData', JSON.stringify(data.data));
update({token: data.token, userData: data.data});
update({ token: data.token, userData: data.data });
if (Global.navigation) {
Global.navigation.replace('Tab');
}
Expand All @@ -30,14 +31,21 @@ export const login = ({config = {}, update, formData, remember}) => {
};

// 验证token
export const useAuthToken = ({token, update}) => {
export const useAuthToken = () => {
const { token } = useSelector(state => state.global)
const dispatch = useDispatch()
const mutation = useMutation({
mutationFn: userAuth,
onMutate: async () => {
let host = await AsyncStorage.getItem('apihost');
if (!host && conf.hosts[0]) {
await AsyncStorage.setItem('apihost', JSON.stringify(conf.hosts[0]));
await update({apihost: conf.hosts[0]});
dispatch({
type: "global/update",
payload: {
apihost: conf.hosts[0]
}
})
}
if (!token) {
await AsyncStorage.removeItem('userData');
Expand All @@ -46,20 +54,39 @@ export const useAuthToken = ({token, update}) => {
},
onSuccess: async data => {
if (data?.token) {
await update({authState: true, token: data.token});
dispatch({
type: "global/update",
payload: {
token: data.token,
authState: true
}
})
} else {
await update({authState: true, token: null});
dispatch({
type: "global/update",
payload: {
authState: true,
token: null
}
})
}
},
});
return mutation;
};

// 退出
export const logout = ({update}) => {
export const logout = () => {
const dispatch = useDispatch()
AsyncStorage.removeItem('token');
AsyncStorage.removeItem('userData');
update({token: null, userData: null});
dispatch({
type: "global/update",
payload: {
token: null,
authState: null
}
})
if (Global.navigation) {
Global.navigation.navigate?.('SignIn');
}
Expand Down
20 changes: 6 additions & 14 deletions HelloWorld/src/pages/AuthLoading/index.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
import React, { useEffect } from 'react';
import { Text, StatusBar, StyleSheet, SafeAreaView } from 'react-native';
import { connect } from 'react-redux';
import { useSelector } from 'react-redux';
import { Flex, Loader, H3, Icon } from '@uiw/react-native';
import Global from '../../global';
import { logoLight } from '../../components/icons/signin';
import Footer from '../../components/Footer';
import { useAuthToken } from '../../hooks/users'


const AuthLoadingScreen = ({
navigation,
update,
token,
authState,
children
}) => {
const { mutate, isLoading } = useAuthToken({ update, token })
const { token, authState } = useSelector(state=>state.global)
const { mutate, isLoading } = useAuthToken()

useEffect(() => {
if (navigation && Global) {
Global.navigation = navigation;
Expand Down Expand Up @@ -42,15 +42,7 @@ const AuthLoadingScreen = ({
);
}

export default connect(
({ global }) => ({
token: global.token,
authState: global.authState,
}),
({ global }) => ({
update: global.update,
})
)(AuthLoadingScreen);
export default AuthLoadingScreen

const styles = StyleSheet.create({
container: {
Expand Down
27 changes: 0 additions & 27 deletions HelloWorld/src/pages/Home/index.js

This file was deleted.

1 change: 0 additions & 1 deletion HelloWorld/src/routes/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import Home from '../pages/Home';
import SignIn from '../pages/SignIn';
import DevOptions from '../pages/DevOptions';
import MyHomeSetting from '../pages/MyHome/Setting';
Expand Down
82 changes: 54 additions & 28 deletions template/template/src/hooks/users.js
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
import { Alert } from "react-native";
import AsyncStorage from "@react-native-async-storage/async-storage";
import { userLogin, userAuth } from "../services/users";
import { useQuery, useMutation } from "react-query";
import Global from "../global";
import conf from "../config";

import { Alert } from 'react-native';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { userLogin, userAuth } from '../services/users';
import { useQuery, useMutation } from 'react-query';
import Global from '../global';
import conf from '../config';
import { useSelector, useDispatch } from 'react-redux'
// 登录
export const useLogin = ({ config = {}, update, formData, remember }) => {
export const login = ({ config = {}, update, remember }) => {
const mutation = useMutation({
mutationFn: userLogin,
onSuccess: async (data) => {
onSuccess: async data => {
if (data?.token && data?.data) {
await AsyncStorage.setItem("token", data.token);
await AsyncStorage.setItem('token', data.token);
if (remember) {
await AsyncStorage.setItem("cachLoginName", formData.loginName);
await AsyncStorage.setItem("cachPassword", formData.password);
await AsyncStorage.setItem('cachLoginName', formData.loginName);
await AsyncStorage.setItem('cachPassword', formData.password);
}
await AsyncStorage.setItem("userData", JSON.stringify(data.data));
await AsyncStorage.setItem('userData', JSON.stringify(data.data));
update({ token: data.token, userData: data.data });
if (Global.navigation) {
Global.navigation.replace("Tab");
Global.navigation.replace('Tab');
}
} else if (data && data.message) {
Alert.alert(`Login failed - ${data.error}`, data.message);
Expand All @@ -31,37 +31,63 @@ export const useLogin = ({ config = {}, update, formData, remember }) => {
};

// 验证token
export const useAuthToken = ({ token, update }) => {
export const useAuthToken = () => {
const { token } = useSelector(state => state.global)
const dispatch = useDispatch()
const mutation = useMutation({
mutationFn: userAuth,
onMutate: async () => {
let host = await AsyncStorage.getItem("apihost");
let host = await AsyncStorage.getItem('apihost');
if (!host && conf.hosts[0]) {
await AsyncStorage.setItem("apihost", JSON.stringify(conf.hosts[0]));
await update({ apihost: conf.hosts[0] });
await AsyncStorage.setItem('apihost', JSON.stringify(conf.hosts[0]));
dispatch({
type: "global/update",
payload: {
apihost: conf.hosts[0]
}
})
}
if (!token) {
await AsyncStorage.removeItem("userData");
await AsyncStorage.removeItem("token");
await AsyncStorage.removeItem('userData');
await AsyncStorage.removeItem('token');
}
},
onSuccess: async (data) => {
onSuccess: async data => {
if (data?.token) {
await update({ authState: true, token: data.token });
dispatch({
type: "global/update",
payload: {
token: data.token,
authState: true
}
})
} else {
await update({ authState: true, token: null });
dispatch({
type: "global/update",
payload: {
authState: true,
token: null
}
})
}
},
});
return mutation;
};

// 退出
export const logout = ({ update }) => {
AsyncStorage.removeItem("token");
AsyncStorage.removeItem("userData");
update({ token: null, userData: null });
export const logout = () => {
const dispatch = useDispatch()
AsyncStorage.removeItem('token');
AsyncStorage.removeItem('userData');
dispatch({
type: "global/update",
payload: {
token: null,
authState: null
}
})
if (Global.navigation) {
Global.navigation.navigate?.("SignIn");
Global.navigation.navigate?.('SignIn');
}
};
20 changes: 6 additions & 14 deletions template/template/src/pages/AuthLoading/index.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
import React, { useEffect } from 'react';
import { Text, StatusBar, StyleSheet, SafeAreaView } from 'react-native';
import { connect } from 'react-redux';
import { useSelector } from 'react-redux';
import { Flex, Loader, H3, Icon } from '@uiw/react-native';
import Global from '../../global';
import { logoLight } from '../../components/icons/signin';
import Footer from '../../components/Footer';
import { useAuthToken } from '../../hooks/users'


const AuthLoadingScreen = ({
navigation,
update,
token,
authState,
children
}) => {
const { mutate, isLoading } = useAuthToken({ update, token })
const { token, authState } = useSelector(state=>state.global)
const { mutate, isLoading } = useAuthToken()

useEffect(() => {
if (navigation && Global) {
Global.navigation = navigation;
Expand Down Expand Up @@ -42,15 +42,7 @@ const AuthLoadingScreen = ({
);
}

export default connect(
({ global }) => ({
token: global.token,
authState: global.authState,
}),
({ global }) => ({
update: global.update,
})
)(AuthLoadingScreen);
export default AuthLoadingScreen

const styles = StyleSheet.create({
container: {
Expand Down
27 changes: 0 additions & 27 deletions template/template/src/pages/Home/index.js

This file was deleted.

1 change: 0 additions & 1 deletion template/template/src/routes/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import Home from "../pages/Home";
import SignIn from "../pages/SignIn";
import DevOptions from "../pages/DevOptions";
import MyHomeSetting from "../pages/MyHome/Setting";
Expand Down

0 comments on commit 78641e1

Please sign in to comment.