0
Frontend
import React from 'react';
import { Link } from 'react-router-dom';
import Header from '../../components/header/header'
import './login.css'
import loginImage from '../../assets/images/login_page.svg'
function LoginPage() {
return (
<div id="login-landing">
<Header />
<div className="content-wrapper">
<div className="img-div">
<img className="img" src={loginImage} alt="Validation" />
</div>
<div className="content">
<div className="text">
<h1>Login</h1>
</div>
<div className="input-block">
<label htmlFor="email">Email</label>
<input
id="email"
type="email"
placeholder="Insira seu email..."
required
/>
</div>
<div className="input-block">
<label htmlFor="password">Senha</label>
<input
type="password"
id="password"
placeholder="Insira sua senha..."
required
/>
</div>
<div className="buttons">
<Link to="/" className="cancel-button">
Cancelar
</Link>
<Link to="/dashboard" className="login-button">
Confirmar
</Link>
</div>
</div>
</div>
</div >
)
}
export default LoginPage
Authentication Controller
import {Request, Response} from 'express'
import {getConnection, getRepository} from 'typeorm'
import User from '../models/user'
import bcrypt from 'bcryptjs'
import crypto from 'crypto'
require("dotenv-safe")
var jwt = require('jsonwebtoken');
var nodemailer = require('nodemailer');
const transport = require('../../modules/mailer')
class AuthController{
async authenticate(req: Request, res: Response){
const repository = getRepository(User)
const {email, password} = req.body
const user = await repository.findOne({where: {email}})
if (!user) {
return res.sendStatus(401)
}
const isValidPassword = await bcrypt.compare(password, user.password)
if(!isValidPassword){
return res.sendStatus(401)
}
const token = jwt.sign({ id: user.id }, process.env.SECRET, {expiresIn: "1d"})
user.password = ''
user.secondPassword = ''
return res.json({
user,
token
})
}
async logout(req: Request, res: Response){
const repository = getRepository(User)
const user = await repository.findOne()
if (!user) {
return res.sendStatus(401)
}
const token = jwt.sign({ id: user.id }, process.env.SECRET, {expiresIn: "1ms"})
return res.json({token})
}
}
export default new AuthController();
That one
token
is stored in the client-side. When logging out of the user, simply remove this token from where it is stored(localStorage
for example). It doesn’t make much sense to implement the logout on the server-side if Voce doesn’t use a storage methodology of that token that the server can control (cookie
for example). Then what Voce can do, implement a function that will be executed when the user clicks logout and in this function, delete the token from the storage location.– Cmte Cardeal