Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
P
planner-team-one
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
21
Issues
21
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Евгений Положенцев
planner-team-one
Commits
9b487731
Commit
9b487731
authored
Nov 10, 2022
by
Ibadullina Inabat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
проделана работа по восстановлению пароля
parent
0e93993f
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
127 additions
and
80 deletions
+127
-80
users.ts
planner-api/src/routers/users.ts
+2
-0
App.js
planner-front/src/App.js
+2
-0
ResetPasswordForm.js
planner-front/src/components/UserForm/ResetPasswordForm.js
+28
-0
UserForm.js
planner-front/src/components/UserForm/UserForm.js
+5
-5
UserRegistrationForm.js
...ner-front/src/components/UserForm/UserRegistrationForm.js
+2
-2
ForgottenPassword.js
...ont/src/containers/ForgottenPassword/ForgottenPassword.js
+63
-63
Login.js
planner-front/src/containers/Login/Login.js
+1
-1
Register.js
planner-front/src/containers/Register/Register.js
+1
-1
usersActions.js
planner-front/src/store/actions/usersActions.js
+18
-0
usersReducer.js
planner-front/src/store/reducers/usersReducer.js
+5
-8
No files found.
planner-api/src/routers/users.ts
View file @
9b487731
...
@@ -36,6 +36,7 @@ router.post('/', async (req : Request, res : Response):Promise<object> => {
...
@@ -36,6 +36,7 @@ router.post('/', async (req : Request, res : Response):Promise<object> => {
router
.
post
(
'/sessions/'
,
async
(
req
:
Request
,
res
:
Response
):
Promise
<
object
>
=>
{
router
.
post
(
'/sessions/'
,
async
(
req
:
Request
,
res
:
Response
):
Promise
<
object
>
=>
{
const
{
email
,
password
}
=
req
.
body
;
const
{
email
,
password
}
=
req
.
body
;
console
.
log
(
"email"
+
email
,
"password"
+
password
)
const
user
=
await
dataSource
const
user
=
await
dataSource
.
createQueryBuilder
()
.
createQueryBuilder
()
.
select
(
"user"
)
.
select
(
"user"
)
...
@@ -45,6 +46,7 @@ router.post('/sessions/', async (req : Request, res : Response):Promise<object>
...
@@ -45,6 +46,7 @@ router.post('/sessions/', async (req : Request, res : Response):Promise<object>
if
(
!
user
)
return
res
.
status
(
404
).
send
({
Message
:
'user not found'
})
if
(
!
user
)
return
res
.
status
(
404
).
send
({
Message
:
'user not found'
})
const
isMatch
:
boolean
=
await
user
.
checkPassword
(
password
);
const
isMatch
:
boolean
=
await
user
.
checkPassword
(
password
);
console
.
log
(
"123"
)
if
(
!
isMatch
)
return
res
.
status
(
400
).
send
({
if
(
!
isMatch
)
return
res
.
status
(
400
).
send
({
error
:
"Wrong Password"
error
:
"Wrong Password"
})
})
...
...
planner-front/src/App.js
View file @
9b487731
...
@@ -6,6 +6,7 @@ import MyTasks from './containers/MyTasks/MyTasks';
...
@@ -6,6 +6,7 @@ import MyTasks from './containers/MyTasks/MyTasks';
import
Login
from
'./containers/Login/Login'
;
import
Login
from
'./containers/Login/Login'
;
import
Register
from
'./containers/Register/Register'
;
import
Register
from
'./containers/Register/Register'
;
import
MonthCalendar
from
'./containers/MonthCalendar/MonthCalendar'
;
import
MonthCalendar
from
'./containers/MonthCalendar/MonthCalendar'
;
import
ForgottenPassword
from
"./containers/ForgottenPassword/ForgottenPassword"
;
const
ProtectedRoute
=
({
isAllowed
,
roles
,
redirectUrl
,
children
})
=>
{
const
ProtectedRoute
=
({
isAllowed
,
roles
,
redirectUrl
,
children
})
=>
{
const
user
=
useSelector
(
state
=>
state
.
users
?.
user
);
const
user
=
useSelector
(
state
=>
state
.
users
?.
user
);
...
@@ -95,6 +96,7 @@ const App = () => {
...
@@ -95,6 +96,7 @@ const App = () => {
}
/
>
}
/
>
<
Route
path
=
{
"/sign-in"
}
element
=
{
<
Login
/>
}
/
>
<
Route
path
=
{
"/sign-in"
}
element
=
{
<
Login
/>
}
/
>
<
Route
path
=
{
"/forgottenpassword"
}
element
=
{
<
ForgottenPassword
/>
}
/
>
<
Route
path
=
'*'
element
=
{
<
h1
>
404
<
/h1>}/
>
<
Route
path
=
'*'
element
=
{
<
h1
>
404
<
/h1>}/
>
<
/Route
>
<
/Route
>
<
/Routes
>
<
/Routes
>
...
...
planner-front/src/components/UserForm/ResetPasswordForm.js
0 → 100644
View file @
9b487731
import
{
Button
,
Grid
}
from
"@mui/material"
;
import
{
NavLink
}
from
"react-router-dom"
;
import
FormElement
from
"../UI/Form/FormElement/FormElement"
;
const
ResetPasswordForm
=
({
state
,
onChange
,
onSubmit
,
getFieldError
,
buttonText
})
=>
{
return
<
form
onSubmit
=
{
onSubmit
}
>
<
Grid
container
spacing
=
{
2
}
>
<
FormElement
onChange
=
{
onChange
}
name
=
"email"
label
=
"Enter your email address"
state
=
{
state
}
error
=
{
getFieldError
?.(
"email"
)}
/
>
<
/Grid
>
<
Button
sx
=
{{
mt
:
"15px"
}}
type
=
"submit"
fullWidth
variant
=
"contained"
color
=
"primary"
>
{
buttonText
}
<
/Button
>
<
/form
>
}
export
default
ResetPasswordForm
;
\ No newline at end of file
planner-front/src/components/UserForm/UserForm.js
View file @
9b487731
import
{
Button
,
Grid
}
from
"@mui/material"
;
import
{
Button
,
Grid
}
from
"@mui/material"
;
//
import { NavLink } from "react-router-dom";
import
{
NavLink
}
from
"react-router-dom"
;
import
FormElement
from
"../UI/Form/FormElement/FormElement"
;
import
FormElement
from
"../UI/Form/FormElement/FormElement"
;
const
UserForm
=
({
state
,
onChange
,
onSubmit
,
getFieldError
,
buttonText
,
resetPassword
})
=>
{
const
UserForm
=
({
state
,
onChange
,
onSubmit
,
getFieldError
,
buttonText
,
resetPassword
})
=>
{
...
@@ -30,17 +30,17 @@ const UserForm = ({ state, onChange, onSubmit, getFieldError, buttonText, resetP
...
@@ -30,17 +30,17 @@ const UserForm = ({ state, onChange, onSubmit, getFieldError, buttonText, resetP
>
>
{
buttonText
}
{
buttonText
}
<
/Button
>
<
/Button
>
{
/*
<Button
<
Button
component
=
{
NavLink
}
component
=
{
NavLink
}
to
=
{
"/forgottenpassword"
}
to
=
{
"/forgottenpassword"
}
sx={{ mt: "15px" }}
sx
=
{{
mt
:
"15px"
,
color
:
"red"
}}
type
=
"submit"
type
=
"submit"
fullWidth
fullWidth
variant
=
"contained"
variant
=
"contained"
color="
primary
"
color
=
"
inherit
"
>
>
{
resetPassword
}
{
resetPassword
}
</Button>
*/
}
<
/Button
>
<
/form
>
<
/form
>
}
}
...
...
planner-front/src/components/UserForm/UserRegistrationForm.js
View file @
9b487731
...
@@ -25,13 +25,13 @@ const UserRegistrationForm = ({ state, onChange, onSubmit, getFieldError, button
...
@@ -25,13 +25,13 @@ const UserRegistrationForm = ({ state, onChange, onSubmit, getFieldError, button
state
=
{
state
}
state
=
{
state
}
error
=
{
getFieldError
?.(
"email"
)}
error
=
{
getFieldError
?.(
"email"
)}
/
>
/
>
<
FormElement
{
/*
<FormElement
onChange={onChange}
onChange={onChange}
name="number"
name="number"
label="Number"
label="Number"
state={state}
state={state}
error={getFieldError?.("number")}
error={getFieldError?.("number")}
/
>
/>
*/
}
<
FormElement
<
FormElement
onChange
=
{
onChange
}
onChange
=
{
onChange
}
name
=
"password"
name
=
"password"
...
...
planner-front/src/containers/ForgottenPassword/ForgottenPassword.js
View file @
9b487731
//
import { useState } from "react";
import
{
useState
}
from
"react"
;
//
import { useDispatch, useSelector } from "react-redux";
import
{
useDispatch
,
useSelector
}
from
"react-redux"
;
//
import { useNavigate } from "react-router-dom";
import
{
useNavigate
}
from
"react-router-dom"
;
//
import Loader from "../../components/UI/Loader/Loader";
import
Loader
from
"../../components/UI/Loader/Loader"
;
// import UserForm from "../../components/UserForm/UserForm
";
import
{
loginUser
}
from
"../../store/actions/usersActions
"
;
// import { loginUser } from "../../store/actions/usersActions"
;
import
PersonIcon
from
'@mui/icons-material/Person'
;
// import PersonIcon from '@mui/icons-material/Person'
;
import
styled
from
"@emotion/styled"
;
// import styled from "@emotion/styled
";
import
{
Alert
,
Avatar
,
Container
,
Typography
}
from
"@mui/material
"
;
// import { Alert, Avatar, Container, Typography } from "@mui/material
";
import
ResetPasswordForm
from
"../../components/UserForm/ResetPasswordForm
"
;
//
const StyledContainer = styled(Container)`
const
StyledContainer
=
styled
(
Container
)
`
//
padding-top: 30px;
padding-top: 30px;
//
padding-bottom: 30px;
padding-bottom: 30px;
//
box-shadow: 0 18px 30px 0 rgba(0, 0, 0, 0.6);
box-shadow: 0 18px 30px 0 rgba(0, 0, 0, 0.6);
//
border-radius: 6px;
border-radius: 6px;
//
`;
`
;
//
const StyledTitle = styled(Typography)`
const
StyledTitle
=
styled
(
Typography
)
`
//
text-align: center;
text-align: center;
//
font-size: 30px;
font-size: 30px;
//
margin-bottom: 30px;
margin-bottom: 30px;
//
`;
`
;
//
const ForgottenPassword = () => {
const
ForgottenPassword
=
()
=>
{
//
const [state, setState] = useState({
const
[
state
,
setState
]
=
useState
({
//
email: '',
email
:
''
,
//
redirectUrl: 'http://localhost:3000/passwordreset'
redirectUrl
:
'http://localhost:3000/passwordreset'
//
});
});
//
const dispatch = useDispatch();
const
dispatch
=
useDispatch
();
//
const { loginError, loading } = useSelector(state => state.users);
const
{
loginError
,
loading
}
=
useSelector
(
state
=>
state
.
users
);
//
console.log(loginError)
console
.
log
(
loginError
)
//
const navigate = useNavigate("/")
const
navigate
=
useNavigate
(
"/"
)
//
const inputChangeHandler = (e) => {
const
inputChangeHandler
=
(
e
)
=>
{
//
const { name, value } = e.target;
const
{
name
,
value
}
=
e
.
target
;
//
setState((prevState) => {
setState
((
prevState
)
=>
{
//
return {
return
{
//
...prevState,
...
prevState
,
//
[name]: value
[
name
]:
value
//
}
}
//
});
});
//
};
};
//
const submitHandler = async (e) => {
const
submitHandler
=
async
(
e
)
=>
{
//
e.preventDefault();
e
.
preventDefault
();
//
await dispatch(loginUser(state, navigate));
await
dispatch
(
loginUser
(
state
,
navigate
));
//
};
};
//
return <>
return
<>
//
<StyledContainer component={"section"} maxWidth={"xs"}>
<
StyledContainer
component
=
{
"section"
}
maxWidth
=
{
"xs"
}
>
//
{!!loginError && <Alert color="error">{loginError}</Alert>}
{
!!
loginError
&&
<
Alert
color
=
"error"
>
{
loginError
}
<
/Alert>
}
//
<Avatar sx={{ m: "0 auto 30px" }}>
<
Avatar
sx
=
{{
m
:
"0 auto 30px"
}}
>
//
<PersonIcon />
<
PersonIcon
/>
//
</Avatar>
<
/Avatar
>
//
<StyledTitle variant={"h1"}>
<
StyledTitle
variant
=
{
"h1"
}
>
//
Password Reset
Password
Reset
//
</StyledTitle>
<
/StyledTitle
>
// <User
Form
<
ResetPassword
Form
//
onSubmit={submitHandler}
onSubmit
=
{
submitHandler
}
//
state={state}
state
=
{
state
}
//
onChange={inputChangeHandler}
onChange
=
{
inputChangeHandler
}
// buttonText={"Sign In
"}
buttonText
=
{
"Submit
"
}
//
resetPassword={"Forgot your password?"}
resetPassword
=
{
"Forgot your password?"
}
//
/>
/
>
//
</StyledContainer>
<
/StyledContainer
>
//
<Loader loading={loading} />
<
Loader
loading
=
{
loading
}
/
>
//
</>
<
/
>
//
};
};
// export default ForgottenPassword;
export
default
ForgottenPassword
;
\ No newline at end of file
\ No newline at end of file
planner-front/src/containers/Login/Login.js
View file @
9b487731
...
@@ -62,7 +62,7 @@ const Login = () => {
...
@@ -62,7 +62,7 @@ const Login = () => {
state
=
{
state
}
state
=
{
state
}
onChange
=
{
inputChangeHandler
}
onChange
=
{
inputChangeHandler
}
buttonText
=
{
"Sign In"
}
buttonText
=
{
"Sign In"
}
//
resetPassword={"Forgot your password?"}
resetPassword
=
{
"Forgot your password?"
}
/
>
/
>
<
/StyledContainer
>
<
/StyledContainer
>
<
Loader
loading
=
{
loading
}
/
>
<
Loader
loading
=
{
loading
}
/
>
...
...
planner-front/src/containers/Register/Register.js
View file @
9b487731
...
@@ -26,7 +26,7 @@ const Register = () => {
...
@@ -26,7 +26,7 @@ const Register = () => {
name
:
''
,
name
:
''
,
surname
:
""
,
surname
:
""
,
email
:
""
,
email
:
""
,
number
:
""
,
//
number: "",
password
:
''
,
password
:
''
,
// avatar: "",
// avatar: "",
});
});
...
...
planner-front/src/store/actions/usersActions.js
View file @
9b487731
...
@@ -49,7 +49,25 @@ const logoutUserFailure = (error) => {
...
@@ -49,7 +49,25 @@ const logoutUserFailure = (error) => {
export
const
loginUser
=
(
userData
,
navigate
)
=>
{
export
const
loginUser
=
(
userData
,
navigate
)
=>
{
return
async
(
dispatch
)
=>
{
return
async
(
dispatch
)
=>
{
try
{
try
{
console
.
log
(
userData
)
const
response
=
await
axios
.
post
(
"users/sessions"
,
userData
);
const
response
=
await
axios
.
post
(
"users/sessions"
,
userData
);
console
.
log
(
response
)
dispatch
(
loginUserSuccess
(
response
.
data
));
navigate
(
"/"
)
}
catch
(
e
)
{
dispatch
(
loginUserFailure
(
e
?.
response
?.
data
?.
err
))
}
}
}
export
const
forgottenPassword
=
(
userData
,
navigate
)
=>
{
return
async
(
dispatch
)
=>
{
try
{
console
.
log
(
userData
)
const
response
=
await
axios
.
post
(
"users/requestPasswordReset"
,
userData
);
// if (userData.email === response.data.email) {
// }
dispatch
(
loginUserSuccess
(
response
.
data
));
dispatch
(
loginUserSuccess
(
response
.
data
));
navigate
(
"/"
)
navigate
(
"/"
)
}
catch
(
e
)
{
}
catch
(
e
)
{
...
...
planner-front/src/store/reducers/usersReducer.js
View file @
9b487731
import
{
REGISTER_USER_REQUEST
,
REGISTER_USER_SUCCESS
,
REGISTER_USER_FAILURE
,
LOGIN_USER_SUCCESS
,
LOGIN_USER_FAILURE
,
LOGOUT_USER_SUCCESS
}
from
"../actionTypes/actionTypes"
;
import
{
REGISTER_USER_REQUEST
,
REGISTER_USER_SUCCESS
,
REGISTER_USER_FAILURE
,
LOGIN_USER_SUCCESS
,
LOGIN_USER_FAILURE
,
LOGOUT_USER_SUCCESS
}
from
"../actionTypes/actionTypes"
;
const
initialState
=
{
const
initialState
=
{
user
:
{
user
:
null
,
name
:
'Ivan'
,
surname
:
'Petrov'
,
email
:
'test@gmail.com'
,
role
:
'user'
},
registerError
:
null
,
registerError
:
null
,
loginError
:
null
,
loginError
:
null
,
loading
:
false
loading
:
false
};
};
const
usersRedu
s
er
=
(
state
=
initialState
,
action
)
=>
{
const
usersRedu
c
er
=
(
state
=
initialState
,
action
)
=>
{
switch
(
action
.
type
)
{
switch
(
action
.
type
)
{
case
REGISTER_USER_REQUEST
:
case
REGISTER_USER_REQUEST
:
return
{...
state
,
loading
:
true
};
return
{...
state
,
loading
:
true
};
...
@@ -21,8 +16,10 @@ const usersReduser = (state = initialState, action) => {
...
@@ -21,8 +16,10 @@ const usersReduser = (state = initialState, action) => {
case
REGISTER_USER_FAILURE
:
case
REGISTER_USER_FAILURE
:
return
{...
state
,
loading
:
false
,
registerError
:
action
.
error
};
return
{...
state
,
loading
:
false
,
registerError
:
action
.
error
};
case
LOGIN_USER_SUCCESS
:
case
LOGIN_USER_SUCCESS
:
console
.
log
(
"action.user"
+
action
.
user
)
return
{...
state
,
user
:
action
.
user
};
return
{...
state
,
user
:
action
.
user
};
case
LOGIN_USER_FAILURE
:
case
LOGIN_USER_FAILURE
:
console
.
log
(
"action.error"
+
action
.
error
)
return
{...
state
,
loginError
:
action
.
error
};
return
{...
state
,
loginError
:
action
.
error
};
case
LOGOUT_USER_SUCCESS
:
case
LOGOUT_USER_SUCCESS
:
return
{...
state
,
user
:
null
};
return
{...
state
,
user
:
null
};
...
@@ -31,4 +28,4 @@ const usersReduser = (state = initialState, action) => {
...
@@ -31,4 +28,4 @@ const usersReduser = (state = initialState, action) => {
}
}
};
};
export
default
usersRedu
s
er
;
export
default
usersRedu
c
er
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment