Skip to content
Snippets Groups Projects
Commit 642c0cbf authored by Andrea Magnussen's avatar Andrea Magnussen
Browse files

Merge branch '18-authentication' into 'master'

Resolve "Authentication"

Closes #18

See merge request !18
parents 014bb0d9 f723c0db
No related branches found
No related tags found
1 merge request!18Resolve "Authentication"
...@@ -8,6 +8,6 @@ npm-debug.* ...@@ -8,6 +8,6 @@ npm-debug.*
*.mobileprovision *.mobileprovision
*.orig.* *.orig.*
web-build/ web-build/
.idea
# macOS # macOS
.DS_Store .DS_Store
import axios from 'axios';
// Create axios client, pre-configured with baseURL
let APIKit = axios.create({
baseURL: 'http://10.22.205.170:5000',
timeout: 10000,
headers: {'Content-Type': 'multipart/form-data'}
});
// Set JSON Web Token in Client to be included in all calls
export const setClientToken = token => {
APIKit.interceptors.request.use(function(config) {
config.headers.Authorization = `Bearer ${token}`;
return config;
});
};
export default APIKit;
\ No newline at end of file
...@@ -13,13 +13,9 @@ export default function App() { ...@@ -13,13 +13,9 @@ export default function App() {
const authContext = React.useMemo(() => { const authContext = React.useMemo(() => {
return { return {
signIn: () => { signInApp: () => {
setIsLoading(false); setIsLoading(false);
setUserToken('asdf'); setUserToken(true);
},
signUp: () => {
setIsLoading(false);
setUserToken('asdf');
}, },
signOut: () => { signOut: () => {
setIsLoading(false); setIsLoading(false);
...@@ -39,3 +35,4 @@ export default function App() { ...@@ -39,3 +35,4 @@ export default function App() {
); );
} }
...@@ -3,7 +3,6 @@ import { TextInput } from 'react-native-paper'; ...@@ -3,7 +3,6 @@ import { TextInput } from 'react-native-paper';
import { StyleSheet } from 'react-native' import { StyleSheet } from 'react-native'
const MyTextField = (props) => { const MyTextField = (props) => {
const [text, setText] = React.useState('');
return ( return (
<TextInput <TextInput
...@@ -12,8 +11,8 @@ const MyTextField = (props) => { ...@@ -12,8 +11,8 @@ const MyTextField = (props) => {
secureTextEntry={props.secureTextEntry} secureTextEntry={props.secureTextEntry}
mode={props.mode} mode={props.mode}
placeholder={props.placeholder} placeholder={props.placeholder}
value={text} value={props.text}
onChangeText={text => setText(text)} onChangeText={props.onChangeText}
/> />
); );
}; };
......
import React from 'react' import React, { useState, useEffect } from 'react'
import { StyleSheet, Text, View, ScrollView } from 'react-native' import { StyleSheet, Text, View, ScrollView } from 'react-native'
import { Divider } from 'react-native-paper'; import { Divider } from 'react-native-paper';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { useAsyncStorage } from '@react-native-async-storage/async-storage';
import MyTouchableOpacity from '../components/MyTouchableOpacity'; import MyTouchableOpacity from '../components/MyTouchableOpacity';
import { AuthContext } from '../constants/context'; import { AuthContext } from '../constants/context';
...@@ -9,14 +11,26 @@ const ProfileScreen = ({ navigation }) => { ...@@ -9,14 +11,26 @@ const ProfileScreen = ({ navigation }) => {
const { signOut } = React.useContext(AuthContext); const { signOut } = React.useContext(AuthContext);
const [value, setValue] = React.useState({});
const readItemFromStorage = async () => {
const jsonValue = await AsyncStorage.getItem('@user')
let user = JSON.parse(jsonValue);
setValue(user);
};
useEffect(() => {
readItemFromStorage();
}, []);
return ( return (
<ScrollView> <ScrollView>
<View style={styles.container}> <View style={styles.container}>
<Text style={styles.text}>Personal Data</Text> <Text style={styles.text}>Personal Data</Text>
<Divider /> <Divider />
<MyTouchableOpacity title="Name" placeholder="Ola Nordmann" icon="chevron-right" onPress={() => navigation.push("ChangeName")} /> <MyTouchableOpacity title="Name" placeholder={value.name} icon="chevron-right" onPress={() => navigation.push("ChangeName")} />
<Divider /> <Divider />
<MyTouchableOpacity title="Email" placeholder="ola@nordmann.com" icon="chevron-right" onPress={() => navigation.push("ChangeEmailVerify")} /> <MyTouchableOpacity title="Email" placeholder={value.email} icon="chevron-right" onPress={() => navigation.push("ChangeEmailVerify")} />
<Divider /> <Divider />
<MyTouchableOpacity title="Password" icon="chevron-right" onPress={() => navigation.push("ChangePasswordVerify")} /> <MyTouchableOpacity title="Password" icon="chevron-right" onPress={() => navigation.push("ChangePasswordVerify")} />
<Divider /> <Divider />
......
import React from 'react' import React from 'react'
import { StyleSheet, Text, View, Image, ScrollView } from 'react-native' import { StyleSheet, Text, View, Image, ScrollView } from 'react-native'
import AsyncStorage from '@react-native-async-storage/async-storage';
import MyButton from '../components/MyButton' import MyButton from '../components/MyButton'
import { AuthContext } from '../constants/context' import { AuthContext } from '../constants/context'
import MyTextField from '../components/MyTextField' import MyTextField from '../components/MyTextField'
import APIKit, {setClientToken} from '../APIkit';
const SignInScreen = ({ navigation }) => { const SignInScreen = ({ navigation }) => {
const { signIn } = React.useContext(AuthContext); const { signInApp } = React.useContext(AuthContext);
const [email, setEmail] = React.useState('');
const [password, setPassword] = React.useState('');
function signIn() {
let bodyFormData = new FormData();
bodyFormData.append("email", email)
bodyFormData.append("password", password)
APIKit.post('/login', bodyFormData)
.then(function (response) {
if (response.data.access_token) {
setClientToken(response.data.access_token);
signInApp(response.data.access_token);
storeData(response.data);
}
console.log(response.data);
})
.catch(function (response) {
//handle error
console.log(response);
});
}
const storeData = async (value) => {
try {
const jsonValue = JSON.stringify(value)
await AsyncStorage.setItem('@user', jsonValue)
} catch (e) {
// saving error
}
}
return ( return (
<ScrollView style={styles.scrollView}> <ScrollView style={styles.scrollView}>
...@@ -18,8 +52,8 @@ const SignInScreen = ({ navigation }) => { ...@@ -18,8 +52,8 @@ const SignInScreen = ({ navigation }) => {
source={require('../assets/images/ninaLogo.png')} source={require('../assets/images/ninaLogo.png')}
/> />
</View> </View>
<MyTextField style={styles.textfield} mode='outlined' placeholder='Email' label='Email'/> <MyTextField style={styles.textfield} mode='outlined' placeholder='Email' label='Email' onChangeText={email => setEmail(email)} value={email} />
<MyTextField style={styles.textfield} mode='outlined' secureTextEntry={true} placeholder='Password' label='password'/> <MyTextField style={styles.textfield} mode='outlined' secureTextEntry={true} placeholder='Password' label='password' onChangeText={password => setPassword(password)} value={password}/>
<MyButton style={styles.button} title="Sign In" onPress={() => signIn()} /> <MyButton style={styles.button} title="Sign In" onPress={() => signIn()} />
<Text style={styles.text} onPress={() => navigation.push("SignUp")}>Don't have a user?</Text> <Text style={styles.text} onPress={() => navigation.push("SignUp")}>Don't have a user?</Text>
</View> </View>
......
import React from 'react' import React, { useState } from 'react'
import { StyleSheet, Text, View, Image, ScrollView } from 'react-native' import { StyleSheet, Text, View, Image, ScrollView } from 'react-native'
import MyTextField from '../components/MyTextField' import MyTextField from '../components/MyTextField'
import MyButton from '../components/MyButton' import MyButton from '../components/MyButton'
import APIKit from '../APIkit';
const SignUpScreen = ({ navigation }) => { const SignUpScreen = ({ navigation }) => {
const [name, setName] = React.useState('');
const [email, setEmail] = React.useState('');
const [password, setPassword] = React.useState('');
const [confirmPassword, setConfirmPassword] = React.useState('');
function signUp() {
let bodyFormData = new FormData();
bodyFormData.append("name", name)
bodyFormData.append("email", email)
bodyFormData.append("password", password)
bodyFormData.append("confirmPassword", confirmPassword)
APIKit.post('/user', bodyFormData)
.then(function (response) {
//handle success
console.log(response.data.message);
})
.catch(function (response) {
//handle error
console.log(response);
});
}
return ( return (
<ScrollView style={styles.scrollView}> <ScrollView style={styles.scrollView}>
<View style={styles.container}> <View style={styles.container}>
...@@ -13,11 +40,11 @@ const SignUpScreen = ({ navigation }) => { ...@@ -13,11 +40,11 @@ const SignUpScreen = ({ navigation }) => {
source={require('../assets/images/ninaLogo.png')} source={require('../assets/images/ninaLogo.png')}
/> />
</View> </View>
<MyTextField style={styles.textfield} mode='outlined' placeholder='Name' label='Name'/> <MyTextField style={styles.textfield} mode='outlined' placeholder='Name' label='Name' onChangeText={name => setName(name)} value={name} />
<MyTextField style={styles.textfield} mode='outlined' placeholder='Email' label='Email'/> <MyTextField style={styles.textfield} mode='outlined' placeholder='Email' label='Email' onChangeText={email => setEmail(email)} value={email} />
<MyTextField style={styles.textfield} mode='outlined' secureTextEntry={true} placeholder='Password' label='password'/> <MyTextField style={styles.textfield} mode='outlined' secureTextEntry={true} placeholder='Password' label='password' onChangeText={password => setPassword(password)} value={password} />
<MyTextField style={styles.textfield} mode='outlined' secureTextEntry={true} placeholder='Confirm Password' label='Confirm Password'/> <MyTextField style={styles.textfield} mode='outlined' secureTextEntry={true} placeholder='Confirm Password' label='Confirm Password' onChangeText={confirmPassword => setConfirmPassword(confirmPassword)} value={confirmPassword} />
<MyButton style={styles.button} title="Sign Up" onPress={() => console.log("Pressed")} /> <MyButton style={styles.button} title="Sign Up" onPress={() => signUp()} />
<Text style={styles.text} onPress={() => navigation.push("SignIn")}>Already have a user?</Text> <Text style={styles.text} onPress={() => navigation.push("SignIn")}>Already have a user?</Text>
</View> </View>
</ScrollView> </ScrollView>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment