Войдите в систему, подтвердите с помощью passport.js, затем получите пользовательские данные для внешнего интерфейса с помощью axios - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь получить данные от пользователя после того, как он войдет в систему, с моего внешнего интерфейса я отправляю имя пользователя и пароль, и он успешно отправляет данные на сервер, и паспорт успешно перенаправляет на указанный мной маршрут. У меня вопрос, как я могу получить эти пользовательские данные, например, имя пользователя, изображение профиля и т. Д., Чтобы я мог получить доступ к его данным на каждой странице и опустить кнопку входа в систему.

паспорт

const passport = require("passport");
const LocalStrategy = require("passport-local").Strategy;
const UserSchema = require("../model/schemas/user.schema");
const config = require("../config/database.js");
const bcrypt = require("bcrypt");


module.exports = (password) => {
    // Local strategy
    passport.use(new LocalStrategy((username, password, done) => {
        let query = {username: username};
        UserSchema.findOne(query, (err, user) => {
            if(err) throw err;
            if(!user){
                return done(null, false, {message: "Nome de utilizador errado!"})
            }

            // Compare password
            bcrypt.compare(password, user.password, (err, isMatch) => {
                if(err) throw err;
                if(isMatch) {
                    return done(null, user);
                } else {
                    return done(null, false, {message: "Password incorreta!"});
                }
            })
        })
    }));

    passport.serializeUser(function(user, done) {
        done(null, user.id);
    });

    passport.deserializeUser(function(id, done) {
        UserSchema.findById(id, function(err, user) {
            done(err, user);
        });
    });
}

нужная мне часть пользовательского контроллера,

static loginUser(req, res, next){
        console.log(req.body)
        passport.authenticate("local", {
            successRedirect: "/",
            failureRedirect: "/forum",
            failureFlash: true
        })(req, res, next);
    }

Маршрут

const express = require("express");
const router = express.Router();
const UserController = require("../controller/user.controller");



router.get('/', UserController.returnUsers);

router.post('/register', UserController.registerUser);

router.post("/login", UserController.loginUser);


module.exports = router;

на Vue

login() {
      axios.post("http://localhost:3000/login", {
        username: this.form.username,
        password: this.form.password
      });
    },

app.js

require("./config/passport")(passport);
// Passport middleware
app.use(passport.initialize());
app.use(passport.session());

app.get("*", (req, res, next) => {
    res.locals.user = req.user || null;
    next();
})
...