Logout Functionality
import React from 'react'; import {Redirect} from 'react-router-dom'; import './dheader.scss'; import tool from '../../tool'; class DHeader extends React.Component{ constructor(props){ super(props); this.state = { dTitle: 'Dashboard', redirect: false } this.checkLogin(); } checkLogin = async () => { const result = await tool.checkLogin(); if(!result){ this.setState({ redirect: '/login' }) } } logOut = async (uri) => { const result = await tool.fetchAPI(uri); if(result.success){ this.setState({ redirect: '/' }) } } render(){ if(this.state.redirect) { return <Redirect to={this.state.redirect} /> } return( <div className="DHeader"> <section id="header"> <div id="header-outer"> <div className="header-inner region"> <h1>{this.state.dTitle}</h1> <form id="search" action="/admin/search" method='post'> <select id="search-label" name="fsearch-label"> <option>Post</option> <option>Page</option> <option>Author</option> </select> <input type="text" name="querry" placeholder="Search" /> <input type="submit" /> </form> <div id="logout"><a href onClick={()=>this.logOut('/admin/logout')}>Logout</a></div> </div> </div> </section> </div> ); } } export default DHeader;
// routes/admin.js var express = require('express'); var router = express.Router(); router.post('/login', function(req, res, next){ const login = require('../controllers/login'); login.postLogin(req, res); }); router.get('/logged', function(req, res, next){ const login = require('../controllers/login'); login.checkLogin(req, res); }); router.get('/logout', function(req, res, next){ const login = require('../controllers/login'); login.logOut(req, res); }); module.exports = router;
// controllers/login.js class Login{ constructor(){ this.deepcopy = require('deepcopy'); this.vdict = require('../config'); this.usersdb = require('../models/usersdb'); this.bcrypt = require('bcryptjs'); } postLogin(req, res){ const self = this; const data = this.deepcopy(this.vdict); delete data.databaseAccess; this.usersdb.checkUser(req, function(user){ if(user){ if(self.bcrypt.compareSync(req.body.password, user.password)){ req.session.user = user; data.success = true; res.json(data); }else{ data.message = 'The password is wrong.'; data.success = false; res.json(data); } }else{ data.message = 'The email is wrong.'; data.success = false; res.json(data); } }); } checkLogin(req, res){ if(req.session.user){ res.json({logged: true}); }else{ res.json({logged: false}); } } logOut(req, res){ if(req.session.user){ req.session.destroy(function (err) { console.log(err); res.json({success: false}); }); } res.json({success: true}); } }//end class module.exports = new Login();
GitHub: "https://github.com/Sokhavuth/emultimedia
Heroku: https://khmerweb-emultimedia.herokuapp.com/
Comments
Post a Comment