Я пытаюсь применить авторизацию пользователя в моем приложении реакции, но по какой-то причине пользователь, независимо от того, аутентифицирован он или нет, может видеть информацию.
Когда я пытаюсь в почтальоне, это работает. Если пользователь вошел в систему, я вижу данные, если нет, они показывают «401 не авторизован»
Было бы здорово, если бы кто-то мог объяснить мне, как я должен применить авторизацию в приложении реакции,
Это мой паспортный файл:
const User = require('../models/User');
const LocalStrategy = require('passport-local').Strategy;
const bcrypt = require('bcrypt');
const passport = require('passport');
passport.serializeUser(function (user, done) {
done(null, user.id);
});
passport.deserializeUser(function (id, done) {
User.findById(id, function (err, user) {
done(err, user);
});
});
passport.use(new LocalStrategy({ usernameField: "email", passReqToCallback: true },
function (req, email, password, done) {
User.findOne({ email }, function (err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!bcrypt.compareSync(password, user.password)) {
done(null, false, { message: 'Incorrect password.' });
return;
}
return done(null, user);
});
}
));
Это компонент Login.js:
import React, { Component } from "react";
import AuthService from "./AuthService";
import Form from "react-bootstrap/Form";
class Login extends Component {
constructor(props) {
super(props)
this.state = {
email: "",
password: "",
error: false,
}
this.service = new AuthService();
this.handleFormSubmit = this.handleFormSubmit.bind(this);
}
handleFormSubmit = event => {
event.preventDefault();
const email = this.state.email
const password = this.state.password
this.service.login(email, password)
.then((response) => {
this.setState({
email: "",
password: "",
})
})
.catch(error => console.log(error));
}
handleChange = event => {
const { name, value } = event.target;
this.setState({ [name]: value });
};
render() {
return (
<div className="signup-form">
<div className="container">
<div className="row">
<div className="col-4"></div>
<div className="col-4">
<Form onSubmit={this.handleFormSubmit}>
<Form.Group controlId="formGroupEmail">
<Form.Control
size="sm"
type="email"
placeholder="Enter email"
name="email"
value={this.state.email}
onChange={e => { this.handleChange(e) }}
/>
</Form.Group>
<Form.Group controlId="formGroupPassword">
<Form.Control
size="sm"
type="password"
placeholder="Password"
name="password"
value={this.state.password}
onChange={e => { this.handleChange(e) }}
/>
</Form.Group>
<button className="btn btn-primary">Login</button>
</Form>
</div>
<div className="col-4" />
</div>
</div>
</div>
)
}
}
export default Login;
//Auth service file
import axios from 'axios'
class AuthService {
constructor() {
let service = axios.create({
baseUrl: 'http://localhost:3001/api/v1',
withCredentials: true
})
this.service = service;
}
register = (params) => {
return this.service.post('http://localhost:3001/api/v1/register', params)
.then(response => response.data)
}
login = (email, password) => {
return this.service.post('http://localhost:3001/api/v1/login', { email, password })
.then(response => {
console.log("login")
return response.data
})
}
logout = () => {
return this.service.post('http://localhost:3001/api/v1/logout', {})
.then(() => {
console.log('Logged out')
})
}
loggedin = () => {
return this.service.get('http://localhost:3001/api/v1/loggedin')
.then(response => response.data)
}
getUser = () => {
return this.service.get('http://localhost:3001/api/v1/get-user')
.then(response => response.data)
}
}
export default AuthService;
```