Commit 4ab57d10 authored by Ibadullina Inabat's avatar Ibadullina Inabat

Merge branch 'task-26-fix/password_recovery' into 'development'

Task 26 fix/password recovery

See merge request !94
parents f43aba8e aeb834b4
...@@ -14,6 +14,7 @@ const dataSource = myDataSource; ...@@ -14,6 +14,7 @@ const dataSource = myDataSource;
/**Make requiest to init recovery process */ /**Make requiest to init recovery process */
router.post ('/', async (req:Request, res:Response):Promise<void |Response>=>{ router.post ('/', async (req:Request, res:Response):Promise<void |Response>=>{
const {email} = req.body const {email} = req.body
console.log("emeil", email)
const user = await dataSource const user = await dataSource
.getRepository(User) .getRepository(User)
.findOne({ .findOne({
...@@ -21,6 +22,7 @@ router.post ('/', async (req:Request, res:Response):Promise<void |Response>=>{ ...@@ -21,6 +22,7 @@ router.post ('/', async (req:Request, res:Response):Promise<void |Response>=>{
email:email email:email
} }
}) })
console.log('user ', user)
if (!user) return res.status(404).send({message:'user not found'}) if (!user) return res.status(404).send({message:'user not found'})
const token = nanoid(); const token = nanoid();
try{ try{
...@@ -28,6 +30,7 @@ router.post ('/', async (req:Request, res:Response):Promise<void |Response>=>{ ...@@ -28,6 +30,7 @@ router.post ('/', async (req:Request, res:Response):Promise<void |Response>=>{
passwordRecovery.user= user; passwordRecovery.user= user;
passwordRecovery.token=token; passwordRecovery.token=token;
await passwordRecovery.save() await passwordRecovery.save()
console.log('passwordRecover ' , passwordRecovery)
const url = `${FRONTEND_URL}/reset-password/${token}`; const url = `${FRONTEND_URL}/reset-password/${token}`;
await transporter.sendMail({ await transporter.sendMail({
from:"planner45@yandex.com", from:"planner45@yandex.com",
...@@ -74,7 +77,7 @@ router.patch('/:id/change-password', async (req: Request, res: Response):Promise ...@@ -74,7 +77,7 @@ router.patch('/:id/change-password', async (req: Request, res: Response):Promise
.findOneBy({id:req.params.id}) .findOneBy({id:req.params.id})
if(!user) return res.status(404).send({Message:'user not found'}) if(!user) return res.status(404).send({Message:'user not found'})
const salt = await bcrypt.genSalt(SALT_WORK_FACTOR); const salt = await bcrypt.genSalt(SALT_WORK_FACTOR);
let newPassword:string = await bcrypt.hash(req.body.password, salt); const newPassword:string = await bcrypt.hash(req.body.password, salt);
user.password = newPassword user.password = newPassword
try{ try{
await user.save() await user.save()
......
...@@ -119,6 +119,7 @@ const App = () => { ...@@ -119,6 +119,7 @@ const App = () => {
<Route path={"/sign-in"} element={<Login />} /> <Route path={"/sign-in"} element={<Login />} />
<Route path={"/forgottenpassword"} element={<ForgottenPassword />} /> <Route path={"/forgottenpassword"} element={<ForgottenPassword />} />
<Route path={"/reset-password"} element={<div>Reset</div>} />
<Route path='*' element={<h1>404</h1>} /> <Route path='*' element={<h1>404</h1>} />
</Route> </Route>
</Routes> </Routes>
......
...@@ -2,7 +2,7 @@ import { Card, CardActions, CardContent, Grid, IconButton } from "@mui/material" ...@@ -2,7 +2,7 @@ import { Card, CardActions, CardContent, Grid, IconButton } from "@mui/material"
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import ArrowForwardIcon from "@mui/icons-material/ArrowForward"; import ArrowForwardIcon from "@mui/icons-material/ArrowForward";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import DeleteIcon from "@mui/icons-material/Delete";
const ProjectItem = ({ title, tasks, id }) => { const ProjectItem = ({ title, tasks, id }) => {
const user = useSelector(state => state.users.user); const user = useSelector(state => state.users.user);
...@@ -26,6 +26,14 @@ const ProjectItem = ({ title, tasks, id }) => { ...@@ -26,6 +26,14 @@ const ProjectItem = ({ title, tasks, id }) => {
<IconButton component={Link} to={"/projects/" + id}> <IconButton component={Link} to={"/projects/" + id}>
<ArrowForwardIcon /> <ArrowForwardIcon />
</IconButton> </IconButton>
<IconButton
onClick={(id) => {
// deleteHandle(userId);
}}
>
{(title !== "Личные дела") ?
<DeleteIcon /> : null}
</IconButton>
</CardActions> </CardActions>
</Card> </Card>
</Grid> </Grid>
......
...@@ -2,7 +2,7 @@ import { useState } from "react"; ...@@ -2,7 +2,7 @@ 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 { loginUser } from "../../store/actions/usersActions"; import { forgottenPassword, 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";
...@@ -25,7 +25,7 @@ const StyledTitle = styled(Typography)` ...@@ -25,7 +25,7 @@ const StyledTitle = styled(Typography)`
const ForgottenPassword = () => { const ForgottenPassword = () => {
const [state, setState] = useState({ const [state, setState] = useState({
email: '', email: '',
redirectUrl: 'http://localhost:3000/passwordreset' // redirectUrl: 'http://localhost:3000/passwordreset'
}); });
...@@ -46,7 +46,7 @@ const ForgottenPassword = () => { ...@@ -46,7 +46,7 @@ const ForgottenPassword = () => {
const submitHandler = async (e) => { const submitHandler = async (e) => {
e.preventDefault(); e.preventDefault();
await dispatch(loginUser(state, navigate)); await dispatch(forgottenPassword(state, navigate));
}; };
......
...@@ -65,7 +65,7 @@ const Register = () => { ...@@ -65,7 +65,7 @@ const Register = () => {
formData.append(key, state[key]); formData.append(key, state[key]);
console.log("key " + key + "state " + state[key]) console.log("key " + key + "state " + state[key])
}) })
if (state["password"] === state["confirmPassword"]) { if (state.password && state.password === state.confirmPassword) {
await dispatch(registerUser(formData, navigate)); await dispatch(registerUser(formData, navigate));
} else { } else {
alert("Пароли не совпадают") alert("Пароли не совпадают")
......
...@@ -85,14 +85,15 @@ export const forgottenPassword = (userData, navigate) => { ...@@ -85,14 +85,15 @@ export const forgottenPassword = (userData, navigate) => {
return async (dispatch) => { return async (dispatch) => {
try { try {
console.log( 'forgottenPassword userData ',userData) console.log( 'forgottenPassword userData ',userData)
const response = await axios.post("users/requestPasswordReset", userData); const response = await axios.post("/password-recovery", userData);
// if (userData.email === response.data.email) { // if (userData.email === response.data.email) {
// } // }
dispatch(loginUserSuccess(response.data)); console.log('response.data ', response.data)
// dispatch(loginUserSuccess(response.data));
navigate("/") navigate("/")
} catch (e) { } catch (e) {
dispatch(loginUserFailure(e?.response?.data?.err)) console.log("user not found")
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment