Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

AuthContext.js 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import AsyncStorage from "@react-native-async-storage/async-storage";
  2. import * as Google from "expo-auth-session/providers/google";
  3. import React, { createContext, useEffect, useState } from "react";
  4. import { googleApi, loginApi, registerApi } from "../service/user";
  5. export const AuthContext = createContext();
  6. export const AuthProvider = ({ children }) => {
  7. const [userInfo, setUserInfo] = useState({});
  8. const [isLoading, setIsLoading] = useState(false);
  9. // Google Auth
  10. const [request, response, promptAsync] = Google.useAuthRequest({
  11. androidClientId:
  12. "1032296921439-dpgvgkss3ggds0egvo6puf0r7un9em6c.apps.googleusercontent.com",
  13. iosClientId:
  14. "1032296921439-j7jfahhm7q3l07aj04qvdblmcns77oul.apps.googleusercontent.com",
  15. expoClientId:
  16. "1032296921439-vfs9k28sn7kei4nft998ck3067m8ksiq.apps.googleusercontent.com",
  17. });
  18. useEffect(() => {
  19. if (response?.type === "success") {
  20. googleApi(response.authentication.accessToken)
  21. .then((res) => {
  22. if (res.user) {
  23. setUserInfo(res);
  24. AsyncStorage.setItem("userInfo", JSON.stringify(res));
  25. setIsLoading(false);
  26. } else {
  27. callback(res);
  28. setIsLoading(false);
  29. }
  30. })
  31. .catch((e) => {
  32. console.log("error", e);
  33. setIsLoading(false);
  34. });
  35. }
  36. }, [response]);
  37. const login = (email, password, callback) => {
  38. setIsLoading(true);
  39. loginApi({ identifier: email, password })
  40. .then((res) => {
  41. if (res.user) {
  42. setUserInfo(res);
  43. AsyncStorage.setItem("userInfo", JSON.stringify(res));
  44. setIsLoading(false);
  45. } else {
  46. callback(res);
  47. setIsLoading(false);
  48. }
  49. })
  50. .catch((e) => {
  51. console.log("error", e);
  52. setIsLoading(false);
  53. });
  54. };
  55. const googleAuth = () => {
  56. promptAsync({ useProxy: false, showInRecents: true });
  57. };
  58. const register = (username, email, password, callback) => {
  59. setIsLoading(true);
  60. registerApi({ username, email, password })
  61. .then((res) => {
  62. if (res.user) {
  63. setUserInfo(res);
  64. AsyncStorage.setItem("userInfo", JSON.stringify(res));
  65. setIsLoading(false);
  66. } else {
  67. callback(res);
  68. setIsLoading(false);
  69. }
  70. })
  71. .catch((e) => {
  72. console.log("error", e);
  73. setIsLoading(false);
  74. });
  75. };
  76. const logout = () => {
  77. setIsLoading(true);
  78. AsyncStorage.removeItem("userInfo");
  79. setUserInfo({});
  80. setIsLoading(false);
  81. };
  82. const isLoggedIn = async () => {
  83. try {
  84. let userInfo = await AsyncStorage.getItem("userInfo");
  85. userInfo = JSON.parse(userInfo);
  86. if (userInfo) {
  87. setUserInfo(userInfo);
  88. }
  89. } catch (e) {
  90. console.log(e);
  91. }
  92. };
  93. useEffect(() => {
  94. isLoggedIn();
  95. }, []);
  96. return (
  97. <AuthContext.Provider
  98. value={{ isLoading, login, logout, userInfo, register, googleAuth }}
  99. >
  100. {children}
  101. </AuthContext.Provider>
  102. );
  103. };