NextJs / Advanced / Login and auth (for intermediate)
Login (for intermediate)
-
Step
1. registration
FormData and validation
//layout import Layout from "../layouts/default"; //import hook react import { useState } from 'react'; //import Head import Head from 'next/head'; //import router import Router from 'next/router'; //import axios import axios from "axios"; function Register() { //define state const [name, setName] = useState(""); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [passwordConfirmation, setPasswordConfirmation] = useState(""); //define state validation const [validation, setValidation] = useState([]); //function "registerHanlder" const registerHandler = async (e) => { e.preventDefault(); //initialize formData const formData = new FormData(); //append data to formData formData.append('name', name); formData.append('email', email); formData.append('password', password); formData.append('password_confirmation', passwordConfirmation); //send data to server await axios.post(`${process.env.NEXT_PUBLIC_API_BACKEND}/api/register`, formData) .then(() => { //redirect to logi page Router.push('/login') }) .catch((error) => { //assign error to state "validation" setValidation(error.response.data); }) }; return( ) } export default RegisterRegister Account - SantriKoding.com HALAMAN REGISTER
2. login
//layout import Layout from "../layouts/default"; //import hook react import { useState, useEffect } from 'react'; //import Head import Head from 'next/head'; //import router import Router from 'next/router'; //import axios import axios from "axios"; //import js cookie import Cookies from 'js-cookie'; function Login() { //define state const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); //define state validation const [validation, setValidation] = useState([]); //function "loginHanlder" const loginHandler = async (e) => { e.preventDefault(); //initialize formData const formData = new FormData(); //append data to formData formData.append('email', email); formData.append('password', password); //send data to server await axios.post(`${process.env.NEXT_PUBLIC_API_BACKEND}/api/login`, formData) .then((response) => { //set token on localStorage Cookies.set('token', response.data.token); //redirect to dashboard Router.push('/dashboard'); }) .catch((error) => { //assign error to state "validation" setValidation(error.response.data); }) }; //hook useEffect useEffect(() => { //check token if(Cookies.get('token')) { //redirect page dashboard Router.push('/dashboard'); } }, []); return( ) } export default LoginLogin Account - SantriKoding.com HALAMAN LOGIN
{ validation.message && ({validation.message}) }3. Dashboard
//layout import Layout from "../layouts/default"; //import hook react import { useState, useEffect } from 'react'; //import Head import Head from 'next/head'; //import router import Router from 'next/router'; //import axios import axios from 'axios'; //import js cookie import Cookies from 'js-cookie'; function Dashboard() { //get token const token = Cookies.get('token'); //state user const [user, setUser] = useState({}); //function "fetchData" const fetchData = async () => { //set axios header dengan type Authorization + Bearer token axios.defaults.headers.common['Authorization'] = `Bearer ${token}` //fetch user from Rest API await axios.get(`${process.env.NEXT_PUBLIC_API_BACKEND}/api/user`) .then((response) => { //set response user to state setUser(response.data); }) } //hook useEffect useEffect(() => { //check token empty if(!token) { //redirect login page Router.push('/login'); } //call function "fetchData" fetchData(); }, []); //function logout const logoutHanlder = async () => { //set axios header dengan type Authorization + Bearer token axios.defaults.headers.common['Authorization'] = `Bearer ${token}` //fetch Rest API await axios.post(`${process.env.NEXT_PUBLIC_API_BACKEND}/api/logout`) .then(() => { //remove token from cookies Cookies.remove("token"); //redirect halaman login Router.push('/login'); }); }; return ( ) } export default Dashboard;Login Account - SantriKoding.com SELAMAT DATANG {user.name}
MANVIA BLOG