Alewa's avatar
Level 2

React With Laravel API Use Register Error

I am trying to register a new user into my database with react using Laravel API Laravel API

<?php

namespace App\Http\Controllers\API;

use App\Models\User;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class ApiV1UserController extends Controller
{
    public function getUsers(){
        //View all users
        $getUsers = User::get();
        return response()->json(["users"=>$getUsers],200);
    }

    public function registerUser(Request $request){
        //User register
        if($request->isMethod('post')){
            $data = $request->input();
            //echo "<pre>"; print_r($data); die;
            $user = new User;
            $user->name = $data['name'];
            $user->mobile = $data['mobile'];
            $user->email = $data['email'];
            $user->password = bcrypt($data['password']);
            $user->status = 1;
            $user->save();
            return response()->json(["status"=>true,"message"=>"User registered succesfully"],201);
        }
    }

Laravel api route api.php Route::namespace('App\Http\Controllers\API')->group(function(){ //Register user api route Route::post('register-user','ApiV1UserController@registerUser'); });

React user register page Register.js

import React, { useState, useRef } from "react"; import { useNavigate, BrowserRouter as Router } from "react-router-dom"; import { Routes, Route } from "react-router"; import { Link } from "react-router-dom";

function Register() { const [name, setName] = useState(""); const [email, setEmail] = useState(""); const [mobile, setMobile] = useState(""); const [password, setPassword] = useState(""); const navigate = useNavigate();

async function Save() { let item = { name, email, mobile, password }; let result = await fetch("http://jaano.test/api/register-user", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(item), }); // let token = document // .querySelector('meta[name="csrf-token"]') // .getAttribute("content"); result = await result.json(); console.warn("result", result); navigate("/"); }

return ( <section className="login-box"> <div className="container"> <div className="row"> <div className="col-lg-3"> <div className="col-lg-6"> <div className="input-box"> Create Account

          <div className="input-field">
            <input
              type="text"
              className="input"
              value={name}
              onChange={(e) => setName(e.target.value)}
              name="name"
              id="name"
              required
            />
            <label for="name">Full Name</label>
          </div>
          <div className="input-field">
            <input
              type="email"
              className="input"
              value={email}
              onChange={(e) => setEmail(e.target.value)}
              name="email"
              id="email"
              required
            />
            <label for="email">Email</label>
          </div>
          <div className="input-field">
            <input
              type="text"
              className="input"
              value={mobile}
              onChange={(e) => setMobile(e.target.value)}
              name="mobile"
              id="mobile"
              required
            />
            <label for="mobile">Mobile</label>
          </div>
          <div className="input-field">
            <input
              type="password"
              className="input"
              value={password}
              onChange={(e) => setPassword(e.target.value)}
              name="password"
              id="password"
              required
            />
            <label for="password">Password</label>
          </div>
          <div className="ps-2 pb-3">
            <input type="checkbox" className="me-1" name="" id="" />
            <Link to="/terms-conditions">
              Agree to our terms and conditions
            </Link>
          </div>
          <div className="input-field">
            <button onClick={Save} className="login-submit">
              Register
            </button>
          </div>
          <div className="signin">
            <div className="signup pb-2">
              <span>
                <Link to="/login">Already has an account?</Link>
              </span>
            </div>
            <span className="pb-2">
              <Link to="#">Forgot password?</Link>
            </span>
          </div>
        </div>
      </div>
      <div className="col-lg-3"></div>
    </div>
  </div>
</section>

); }

export default Register;

When i try to register, I get this error in my console tool

Register.js:15 POST http://jaano.test/api/register-user 419 (unknown status)

And another Error is 

Uncaught (in promise) SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON

Any help?
0 likes
6 replies
Alewa's avatar
Level 2

React user register page Register.js

import React, { useState, useRef } from "react";
import { useNavigate, BrowserRouter as Router } from "react-router-dom";
import { Routes, Route } from "react-router";
import { Link } from "react-router-dom";

function Register() {
  const [name, setName] = useState("");
  const [email, setEmail] = useState("");
  const [mobile, setMobile] = useState("");
  const [password, setPassword] = useState("");
  const navigate = useNavigate();

  async function Save() {
    let item = { name, email, mobile, password };
    let result = await fetch("http://jaano.test/api/register-user", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify(item),
    });
    // let token = document
    //   .querySelector('meta[name="csrf-token"]')
    //   .getAttribute("content");
    result = await result.json();
    console.warn("result", result);
    navigate("/");
  }

  return (
    <section className="login-box">
      <div className="container">
        <div className="row">
          <div className="col-lg-3"></div>
          <div className="col-lg-6">
            <div className="input-box">
              <header>Create Account</header>

              <div className="input-field">
                <input
                  type="text"
                  className="input"
                  value={name}
                  onChange={(e) => setName(e.target.value)}
                  name="name"
                  id="name"
                  required
                />
                <label for="name">Full Name</label>
              </div>
              <div className="input-field">
                <input
                  type="email"
                  className="input"
                  value={email}
                  onChange={(e) => setEmail(e.target.value)}
                  name="email"
                  id="email"
                  required
                />
                <label for="email">Email</label>
              </div>
              <div className="input-field">
                <input
                  type="text"
                  className="input"
                  value={mobile}
                  onChange={(e) => setMobile(e.target.value)}
                  name="mobile"
                  id="mobile"
                  required
                />
                <label for="mobile">Mobile</label>
              </div>
              <div className="input-field">
                <input
                  type="password"
                  className="input"
                  value={password}
                  onChange={(e) => setPassword(e.target.value)}
                  name="password"
                  id="password"
                  required
                />
                <label for="password">Password</label>
              </div>
              {/* <div className="input-field">
                  <input
                    type="password"
                    className="input"
                    name="password"
                    id="password"
                    required
                  />
                  <label for="password">Confirm Password</label>
                </div> */}
              <div className="ps-2 pb-3">
                <input type="checkbox" className="me-1" name="" id="" />
                <Link to="/terms-conditions">
                  Agree to our terms and conditions
                </Link>
              </div>
              <div className="input-field">
                <button onClick={Save} className="login-submit">
                  Register
                </button>
              </div>
              <div className="signin">
                <div className="signup pb-2">
                  <span>
                    <Link to="/login">Already has an account?</Link>
                  </span>
                </div>
                <span className="pb-2">
                  <Link to="#">Forgot password?</Link>
                </span>
              </div>
            </div>
          </div>
          <div className="col-lg-3"></div>
        </div>
      </div>
    </section>
  );
}

export default Register;

Alewa's avatar
Level 2

And when i click on this link, http://jaano.test/api/register-user I get this error The GET method is not supported for this route. Supported methods: POST.

gych's avatar

@Alewa Its a POST route so you can't use it as link or in the browser address bar.

Alewa's avatar
Level 2

@gych please don't understand what you are saying, any example in written?

puklipo's avatar

You should learn the basics of Laravel before you start using it in more difficult ways.

1 like
Alewa's avatar
Level 2

@puklipo I alraedy know the basic of laravel, I have created an ecommerce website in laravel, and now want to learn react and created only the frontend of my ecommerce website with react.

Please or to participate in this conversation.