登录用户,使用passport.js进行验证,然后使用axios将用户数据获取到前端

时间:2019-05-21 15:54:26

标签: node.js vue.js axios passport.js vuex

我正在尝试从用户登录后获取数据,我从前端提交用户名和密码,它成功将数据发送到服务器,并且护照成功重定向到我指定的路由。我的问题是如何获取用户数据,示例用户名,个人资料图片等,以便可以在每个页面上访问他的数据并省略登录按钮。

护照

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;

在线观看

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();
})

0 个答案:

没有答案