Skip to content

Commit c4943e1

Browse files
committed
authentication
1 parent 0e8460f commit c4943e1

File tree

11 files changed

+308
-57
lines changed

11 files changed

+308
-57
lines changed

server/djangoapp/urls.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
# Uncomment the imports before you add the code
2-
# from django.urls import path
2+
from django.urls import path
33
from django.conf.urls.static import static
44
from django.conf import settings
5-
# from . import views
5+
from . import views
66

77
app_name = 'djangoapp'
88
urlpatterns = [
99
# # path for registration
1010

1111
# path for login
12-
# path(route='login', view=views.login_user, name='login'),
12+
path(route='login', view=views.login_user, name='login'),
13+
path(route='logout', view=views.logout_request, name='logout'),
14+
path(route='registration', view=views.registration, name='registration'),
15+
# path for home view
16+
1317

1418
# path for dealer reviews view
1519

server/djangoapp/views.py

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
# Uncomment the required imports before adding the code
22

3-
# from django.shortcuts import render
4-
# from django.http import HttpResponseRedirect, HttpResponse
5-
# from django.contrib.auth.models import User
6-
# from django.shortcuts import get_object_or_404, render, redirect
7-
# from django.contrib.auth import logout
8-
# from django.contrib import messages
9-
# from datetime import datetime
3+
from django.shortcuts import render
4+
from django.http import HttpResponseRedirect, HttpResponse
5+
from django.contrib.auth.models import User
6+
from django.shortcuts import get_object_or_404, render, redirect
7+
from django.contrib.auth import logout
8+
from django.contrib import messages
9+
from datetime import datetime
1010

1111
from django.http import JsonResponse
1212
from django.contrib.auth import login, authenticate
@@ -39,13 +39,41 @@ def login_user(request):
3939
return JsonResponse(data)
4040

4141
# Create a `logout_request` view to handle sign out request
42-
# def logout_request(request):
43-
# ...
42+
def logout_request(request):
43+
logout(request)
44+
data ={"userName": ""}
45+
return JsonResponse(data)
4446

4547
# Create a `registration` view to handle sign up request
46-
# @csrf_exempt
47-
# def registration(request):
48-
# ...
48+
@csrf_exempt
49+
def registration(request):
50+
context = {}
51+
data = json.loads(request.body)
52+
username = data['userName']
53+
password = data['password']
54+
first_name = data['firstName']
55+
last_name = data['lastName']
56+
email = data['email']
57+
username_exist = False
58+
email_exist = False
59+
try:
60+
# Check if user already exists
61+
User.objects.get(username=username)
62+
username_exist = True
63+
except:
64+
# If not, simply log this is a new user
65+
logger.debug("{} is new user".format(username))
66+
# If it is a new user
67+
if not username_exist:
68+
# Create user in auth_user table
69+
user = User.objects.create_user(username=username, first_name=first_name, last_name=last_name,password=password, email=email)
70+
# Login the user and redirect to list page
71+
login(request, user)
72+
data = {"userName":username,"status":"Authenticated"}
73+
return JsonResponse(data)
74+
else :
75+
data = {"userName":username,"error":"Already Registered"}
76+
return JsonResponse(data)
4977

5078
# # Update the `get_dealerships` view to render the index page with
5179
# a list of dealerships

server/djangoproj/settings.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@
6262
{
6363
'BACKEND': 'django.template.backends.django.DjangoTemplates',
6464
'DIRS': [
65-
os.path.join(BASE_DIR,'frontend/static')
65+
os.path.join(BASE_DIR,'frontend/static'),
66+
os.path.join(BASE_DIR, 'frontend/build'),
67+
os.path.join(BASE_DIR, 'frontend/build/static'),
6668
],
6769
'APP_DIRS': True,
6870
'OPTIONS': {
@@ -139,6 +141,8 @@
139141
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
140142

141143
STATICFILES_DIRS = [
142-
os.path.join(BASE_DIR,'frontend/static')
144+
os.path.join(BASE_DIR,'frontend/static'),
145+
os.path.join(BASE_DIR, 'frontend/build'),
146+
os.path.join(BASE_DIR, 'frontend/build/static'),
143147
]
144148

server/djangoproj/urls.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,7 @@
2525
path('', TemplateView.as_view(template_name="Home.html")),
2626
path('about/', TemplateView.as_view(template_name="About.html")),
2727
path('contact/', TemplateView.as_view(template_name="Contact.html")),
28+
path('login/', TemplateView.as_view(template_name="index.html")),
29+
path('register/', TemplateView.as_view(template_name="index.html")),
30+
path('logout/', TemplateView.as_view(template_name="index.html")),
2831
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

server/frontend/package-lock.json

Lines changed: 25 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/frontend/src/App.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import LoginPanel from "./components/Login/Login"
2+
import Register from "./components/Register/Register";
23
import { Routes, Route } from "react-router-dom";
34

45
function App() {
56
return (
67
<Routes>
78
<Route path="/login" element={<LoginPanel />} />
9+
<Route path="/register" element={<Register />} />
810
</Routes>
911
);
1012
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
import React, { useState } from "react";
2+
import "./Register.css";
3+
import user_icon from "../assets/person.png"
4+
import email_icon from "../assets/email.png"
5+
import password_icon from "../assets/password.png"
6+
import close_icon from "../assets/close.png"
7+
const Register = () => {
8+
const [userName, setUserName] = useState("");
9+
const [password, setPassword] = useState("");
10+
const [email, setEmail] = useState("");
11+
const [firstName, setFirstName] = useState("");
12+
const [lastName, setlastName] = useState("");
13+
const gohome = ()=> {
14+
window.location.href = window.location.origin;
15+
}
16+
const register = async (e) => {
17+
e.preventDefault();
18+
let register_url = window.location.origin+"/djangoapp/registration";
19+
20+
const res = await fetch(register_url, {
21+
method: "POST",
22+
headers: {
23+
"Content-Type": "application/json",
24+
},
25+
body: JSON.stringify({
26+
"userName": userName,
27+
"password": password,
28+
"firstName":firstName,
29+
"lastName":lastName,
30+
"email":email
31+
}),
32+
});
33+
const json = await res.json();
34+
if (json.status) {
35+
sessionStorage.setItem('username', json.userName);
36+
window.location.href = window.location.origin;
37+
}
38+
else if (json.error === "Already Registered") {
39+
alert("The user with same username is already registered");
40+
window.location.href = window.location.origin;
41+
}
42+
};
43+
return(
44+
<div className="register_container" style={{width: "50%"}}>
45+
<div className="header" style={{display: "flex",flexDirection: "row", justifyContent: "space-between"}}>
46+
<span className="text" style={{flexGrow:"1"}}>SignUp</span>
47+
<div style={{display: "flex",flexDirection: "row", justifySelf: "end", alignSelf: "start" }}>
48+
<a href="/" onClick={()=>{gohome()}} style={{justifyContent: "space-between", alignItems:"flex-end"}}>
49+
<img style={{width:"1cm"}} src={close_icon} alt="X"/>
50+
</a>
51+
</div>
52+
<hr/>
53+
</div>
54+
<form onSubmit={register}>
55+
<div className="inputs">
56+
<div className="input">
57+
<img src={user_icon} className="img_icon" alt='Username'/>
58+
<input type="text" name="username" placeholder="Username" className="input_field" onChange={(e) => setUserName(e.target.value)}/>
59+
</div>
60+
<div>
61+
<img src={user_icon} className="img_icon" alt='First Name'/>
62+
<input type="text" name="first_name" placeholder="First Name" className="input_field" onChange={(e) => setFirstName(e.target.value)}/>
63+
</div>
64+
<div>
65+
<img src={user_icon} className="img_icon" alt='Last Name'/>
66+
<input type="text" name="last_name" placeholder="Last Name" className="input_field" onChange={(e) => setlastName(e.target.value)}/>
67+
</div>
68+
<div>
69+
<img src={email_icon} className="img_icon" alt='Email'/>
70+
<input type="email" name="email" placeholder="email" className="input_field" onChange={(e) => setEmail(e.target.value)}/>
71+
</div>
72+
<div className="input">
73+
<img src={password_icon} className="img_icon" alt='password'/>
74+
<input name="psw" type="password" placeholder="Password" className="input_field" onChange={(e) => setPassword(e.target.value)}/>
75+
</div>
76+
</div>
77+
<div className="submit_panel">
78+
<input className="submit" type="submit" value="Register"/>
79+
</div>
80+
</form>
81+
</div>
82+
)
83+
}
84+
export default Register;

0 commit comments

Comments
 (0)