Как применить авторизацию в приложении «Реакция» по паспорту и экспрессу. Работа с почтальоном, но не на веб-странице - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь применить авторизацию пользователя в моем приложении реакции, но по какой-то причине пользователь, независимо от того, аутентифицирован он или нет, может видеть информацию.

Когда я пытаюсь в почтальоне, это работает. Если пользователь вошел в систему, я вижу данные, если нет, они показывают «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;
```
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...