Brak opisu

App.js 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import { StatusBar } from 'expo-status-bar';
  2. import React, {useState} from 'react';
  3. import { StyleSheet, Text, View } from 'react-native';
  4. import * as Google from "expo-google-app-auth";
  5. import {SocialIcon, socialIcon} from 'react-native-elements'
  6. import {createDrawerNavigator} from '@react-navigation/drawer'
  7. import { NavigationContainer } from '@react-navigation/native';
  8. import * as SecureStore from 'expo-secure-store';
  9. import HomeScreen from './Screens/HomeScreen'
  10. import NotificationsScreen from './Screens/NotificationScreen'
  11. import SettingScreen from './Screens/SettingScreen'
  12. import AddTakenCourse from './Screens/AddTakenCourse'
  13. const Drawer = createDrawerNavigator()
  14. const IOS_CLIENT_ID =
  15. "116415331974-tf6sehooctplmmn7j0gt831mdf1oqipl.apps.googleusercontent.com";
  16. export default function App() {
  17. const [hasToken, setHasToken] = useState(false)
  18. const signInWithGoogle = async ()=>{
  19. try {
  20. const result = await Google.logInAsync({
  21. iosClientId: IOS_CLIENT_ID,
  22. scopes: ["profile", "email"]
  23. })
  24. if (result.type == "success"){
  25. console.log(result.accessToken)
  26. try {
  27. // login user in backend
  28. let response = await fetch('http://ef32e7a10841.ngrok.io/rest-auth/google/', {
  29. method: 'POST',
  30. headers: {
  31. 'content-type': 'application/json'
  32. },
  33. body: JSON.stringify({
  34. access_token: `${result.accessToken}`
  35. })
  36. })
  37. // storing our token
  38. let responseJson = await response.json()
  39. if (responseJson){
  40. if (responseJson.key){
  41. await SecureStore.setItemAsync('token', responseJson.key)
  42. }
  43. }
  44. const token = await SecureStore.getItemAsync('token')
  45. // storing our id
  46. let id = await fetch('http://ef32e7a10841.ngrok.io/api/get_user_id', {
  47. method: 'GET',
  48. headers: {
  49. 'content-type': 'application/json',
  50. Authorization: `Token ${token}`
  51. }
  52. })
  53. let idJson = await id.json()
  54. if (idJson){
  55. if(idJson.user_id){
  56. idJson = idJson.user_id
  57. let id = idJson.toString()
  58. await SecureStore.setItemAsync('id', id)
  59. }
  60. }
  61. } catch(error){
  62. console.log(error)
  63. }
  64. setHasToken(true) // update states and redirect
  65. }
  66. else {
  67. console.log("no")
  68. }
  69. } catch(error){
  70. console.log(error)
  71. }
  72. }
  73. if (!hasToken){
  74. return (
  75. <View style={styles.container}>
  76. <SocialIcon title="Login With Google" button={true} type={"google"} onPress={signInWithGoogle}/>
  77. </View>
  78. );
  79. }
  80. return (
  81. <NavigationContainer>
  82. <Drawer.Navigator initialRouteName="Home">
  83. <Drawer.Screen name="Home" component={HomeScreen}/>
  84. <Drawer.Screen name="Notifications" component={NotificationsScreen} />
  85. <Drawer.Screen name="Settings" component={SettingScreen} />
  86. <Drawer.Screen name="Add Taken Courses" component={AddTakenCourse} />
  87. </Drawer.Navigator>
  88. </NavigationContainer>
  89. )
  90. }
  91. const styles = StyleSheet.create({
  92. container: {
  93. flex: 1,
  94. backgroundColor: '#fff',
  95. alignItems: 'center',
  96. justifyContent: 'center',
  97. },
  98. });