From 0ecd737d860fe99af70ca77e1899f1d3fa4f5c8b Mon Sep 17 00:00:00 2001 From: DuaaH Date: Mon, 18 Nov 2019 13:49:30 +0200 Subject: [PATCH 01/11] server side --- server/controllers/checkAuth.js | 7 ++++++ server/controllers/index.js | 9 ++++++++ server/controllers/login.js | 33 ++++++++++++++++++++++++++++ server/database/db_build.js | 2 -- server/database/fake_data_build.sql | 2 +- server/database/queries/checkUser.js | 13 +++++++++++ server/middlewares/auth.js | 26 ++++++++++++++++++++++ 7 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 server/controllers/checkAuth.js create mode 100644 server/controllers/login.js create mode 100644 server/database/queries/checkUser.js create mode 100644 server/middlewares/auth.js diff --git a/server/controllers/checkAuth.js b/server/controllers/checkAuth.js new file mode 100644 index 0000000..fc7747f --- /dev/null +++ b/server/controllers/checkAuth.js @@ -0,0 +1,7 @@ +exports.checkAuth = (req, res) => { + console.log("kkkklll"); + const { name } = req + + + res.json({ success: true, username: name }) +} \ No newline at end of file diff --git a/server/controllers/index.js b/server/controllers/index.js index 1fb27ac..41a712a 100644 --- a/server/controllers/index.js +++ b/server/controllers/index.js @@ -1,5 +1,14 @@ const express = require('express') +const login = require('./login') +const { auth } = require('../middlewares/auth') +const { checkAuth } = require('./checkAuth') const router = express.Router() +console.log('back end'); + + + +router.get('/api/check-auth', auth, checkAuth) +router.post('/api/login', login.get) module.exports = router diff --git a/server/controllers/login.js b/server/controllers/login.js new file mode 100644 index 0000000..e5981c9 --- /dev/null +++ b/server/controllers/login.js @@ -0,0 +1,33 @@ +const checkUser = require('../database/queries/checkUser.js') +const bcrypt = require('bcrypt') +var jwt = require('jsonwebtoken') + +exports.get = (req, res) => { + console.log("login back end "); + + const { email, password } = req.body + console.log("email", email); + + checkUser(email) + .then(data => { + bcrypt.compare(password, data.password, (err, result) => { + if (err) { + return res.json({ err }) + } + if (result) { + const { userId, userName } = data + + const token = jwt.sign( + { email, user_id: userId, name: userName }, + process.env.SECRET + ) + return res + .cookie('token', token, { maxAge: 99999999 }) + .json({ msg: 'true', token }) + } else { + return res.json({ msg: 'false' }) + } + }) + }) + .catch(err => res.json({ err })) +} \ No newline at end of file diff --git a/server/database/db_build.js b/server/database/db_build.js index dab87c7..d9550d1 100644 --- a/server/database/db_build.js +++ b/server/database/db_build.js @@ -1,6 +1,5 @@ const fs = require('fs') const path = require('path') - const dbConnection = require('./db_connection') const sql = fs.readFileSync(path.join(__dirname, 'db_build.sql')).toString() @@ -14,7 +13,6 @@ const runDbBuild = (sql, sql2) => { }) .catch(err => err) } - runDbBuild(sql, sql2) module.exports = runDbBuild \ No newline at end of file diff --git a/server/database/fake_data_build.sql b/server/database/fake_data_build.sql index fa8e48a..fef7847 100644 --- a/server/database/fake_data_build.sql +++ b/server/database/fake_data_build.sql @@ -1,7 +1,7 @@ BEGIN; Insert into users_accounts(name, email, password) values('yaqoot', 'yaqoot@gmail.com', 1511), - ('duaa', 'duaa@gmail.com', 147), ('someya', 'someya@gmail.com', 123456); + ('duaa', 'duaa@gmail.com', '$2a$10$D/IX/AtYw5YHT4YWI2B2aOg5ZGMBodHNDx2x6vIbHWomyH4fsJ9SG'), ('someya', 'someya@gmail.com', 123456); Insert into category(name, image) values('Work', 'https://i.pinimg.com/564x/b8/2d/77/b82d77b291c7dd35e8a9c7ca9b268070.jpg'), ('Home', 'https://i.pinimg.com/564x/18/37/7a/18377abb31b8fde5a15c709e0dc77047.jpg'), ('Exercise', 'https://i.pinimg.com/564x/ed/56/c3/ed56c3c9b5f0491e64559515fb8cd738.jpg'), ('Study', 'https://i.pinimg.com/564x/5d/23/f1/5d23f15fc4c4fe0d89f56bbf5d1fa1a2.jpg'); diff --git a/server/database/queries/checkUser.js b/server/database/queries/checkUser.js new file mode 100644 index 0000000..5fff477 --- /dev/null +++ b/server/database/queries/checkUser.js @@ -0,0 +1,13 @@ +const dbConnection = require("./../db_connection") + +const checkUser = email => { + return dbConnection + .query( + "select password, user_id, name from users_accounts where email = $1", + [email] + ) + .then(res => res.rows[0]) + .catch(err => console.log(err)) +} + +module.exports = checkUser \ No newline at end of file diff --git a/server/middlewares/auth.js b/server/middlewares/auth.js new file mode 100644 index 0000000..743c2ef --- /dev/null +++ b/server/middlewares/auth.js @@ -0,0 +1,26 @@ +const cookie = require('cookie') +const { verify } = require('jsonwebtoken') +const SECRET = process.env.SECRET + +exports.auth = (req, res, next) => { + console.log("auth"); + + if (req.headers.cookie) { + const { token } = cookie.parse(req.headers.cookie) + verify(token, SECRET, (err, result) => { + if (err) { + return res.json({ error: 'server error', success: false }) + } + if (result) { + req.user_id = result.user_id + req.name = result.name + + return next() + } else { + return res.json({ error: 'not Authorized', success: false }) + } + }) + } else { + return res.json({ error: 'not Authorized', success: false }) + } +} \ No newline at end of file From 11662d2f86ca1b290b21f82cfe6c804801279125 Mon Sep 17 00:00:00 2001 From: DuaaH Date: Tue, 19 Nov 2019 11:10:27 +0200 Subject: [PATCH 02/11] add screen to login --- client/App.js | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/client/App.js b/client/App.js index 757448e..86d4a0d 100644 --- a/client/App.js +++ b/client/App.js @@ -7,9 +7,13 @@ */ import React from 'react'; -import { createStore } from 'redux' +import { createStore, applyMiddleware } from 'redux' +import thunk from 'redux-thunk' import { Provider } from 'react-redux' import reducer from './redux/reducer' +import Login from './src/components/Login' +import { createAppContainer } from 'react-navigation' +import { createStackNavigator } from 'react-navigation-stack' import { SafeAreaView, @@ -25,16 +29,20 @@ import { ReloadInstructions, } from 'react-native/Libraries/NewAppScreen'; -const store = createStore(reducer) +const store = createStore(reducer, applyMiddleware(thunk)) + +const navigationStak = createStackNavigator({ + Login: { screen: Login }, +}) + +let Navigation = createAppContainer(navigationStak); + + const App: () => React$Node = () => { return ( - - - {/* //tags */} - HI - + ); From 6ff4bb930c0a74c4cc6dd0a7eb5bce768105d5cb Mon Sep 17 00:00:00 2001 From: DuaaH Date: Tue, 19 Nov 2019 11:11:53 +0200 Subject: [PATCH 03/11] create functions using redux --- client/redux/action.js | 18 +++++++++++++++++- client/redux/reducer.js | 11 ++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/client/redux/action.js b/client/redux/action.js index c65bae4..db41092 100644 --- a/client/redux/action.js +++ b/client/redux/action.js @@ -1 +1,17 @@ -//actions \ No newline at end of file +//actions + +import axios from 'axios' + +export const checkLogin = (email, password) => async (dispatch) => { + try { + const data = await axios.post("http://192.168.13.248:4000/api/login", { email, password }) + const login = data.data.msg + dispatch({ + type: 'LOGIN', + login + }) + } + catch { + console.log("ee", e); + } +} \ No newline at end of file diff --git a/client/redux/reducer.js b/client/redux/reducer.js index ab65418..592eb0e 100644 --- a/client/redux/reducer.js +++ b/client/redux/reducer.js @@ -1,6 +1,10 @@ const initialState = { - + email: "", + password: "", + errorMsg: "", + login: false, + success: false, } // reducer function @@ -9,6 +13,11 @@ const initialState = { const reducer = (state = initialState, action) => { switch (action.type) { + case "LOGIN": + return { + ...state, + login: action.login + } default: return state } } From 0337585846b18b63c5115d97fba1ecfc05b7db8d Mon Sep 17 00:00:00 2001 From: DuaaH Date: Tue, 19 Nov 2019 11:12:37 +0200 Subject: [PATCH 04/11] create login component --- client/src/components/Login.js | 83 ++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 client/src/components/Login.js diff --git a/client/src/components/Login.js b/client/src/components/Login.js new file mode 100644 index 0000000..f5bb501 --- /dev/null +++ b/client/src/components/Login.js @@ -0,0 +1,83 @@ +import React, { Component } from 'react' +import axios from 'axios' +import { + View, + Text, + Button, + TextInput, + StyleSheet, +} from 'react-native'; +import { connect } from 'react-redux' +import { bindActionCreators } from 'redux' +import { checkLogin } from '../../redux/action' + +class Login extends Component { + state = { + email: "", + password: "", + errorMsg: "", + }; + + componentDidMount = () => { + + } + + handleInputEmail = email => { + this.setState({ email }); + }; + + handleInputPassword = password => { + this.setState({ password }); + }; + + logedIn = () => { + const { email, password } = this.state + this.props.checkLogin(email, password) + const { login } = this.props; + if (login) { + alert('Login') + this.props.navigation.navigate('Dashboard') + } + else { + alert('email or password is not correct') + } + }; + render() { + + + return ( + + Welcome to Notepad + + +