Using React, Typescript and Nodejs. I need to login and logout users

Asked

Viewed 191 times

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();
  • 1

    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.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.