Я хочу применить паспортный пакет node.js к vue.js - PullRequest
0 голосов
/ 28 сентября 2019

Passport.authenticate сойдет с ума, распечатав 400 ошибок ... Я хочу знать, почему не работает паспорт, и выдает ошибки, когда регистр работает.Помогите мне.

Если вы используете паспорт из node.js через html-документ, он не работает должным образом, потому что он перемещен в vue.Я новичокЯ думаю, что сделал много ошибок.Я не знаю, где проблема.

на стороне этого сервера (узла) backend / router / login.js

также, я проверил vue для данных черезconsole.log.

var express = require('express');
var router = express.Router();
var User = require('../models/user');
var passport = require('passport');


router.post('/signUp', function(req, res, next) {
 var id = req.body.user.username;
 var password = req.body.user.password;
 console.log('id: ' + req.body.user.username);
 console.log('password: ' + password);
 User.register(new User({username: id}), password, function(err,newuser) {
    if(err){
        console.log(err);
        return res.json({result: 0});
    }else{
        passport.authenticate('local', function (err, user, info) {
            var error = err || info;
            if (error) return res.json(401, error);
            if (!user) return res.json(404, {message: 'Something went wrong, please try again.'});
            res.json(req.user);
          })(req, res, next);
        }
    });
});

router.post('/', passport.authenticate('local') ,function(req, res) {
    return res.json({result: 1});
});

module.exports = router;

на стороне клиента внешний интерфейс / src / components / users / SignUpPage.vue

<template>
   <div id="SignUp">
     <div> Sign Up </div>
     ID : <input v-model="user.username" placeholder="ID"> <br />
     Password : <input v-model="user.password" type="password"  placeholder="password">
     <button v-on:click="signUp" >SignUp</button>
  </div>
</template>

<script>
    export default {
    data: function () {
    return {
    user: {
      username: '',
      password: ''
    }
   }
  },
     methods: {
      signUp: function (event) {
        this.$http.post('/api/login/signUp', { 
          user: this.user
      }, { withCredentials: true })
      .then((response) => {
        console.log('response');
        console.log(response.data);
       if (response.data.result == 0) {
         alert('Error, please, try again');
       }
    if (response.data.result == 1) {
      alert('Success');
      this.$router.push('/login');
    }
  })
      .catch(function (error) {
         alert('frontend error');
        console.log(error);
      })
    }
  }
}
 </script>

Я настроил его как бэкэнд, когдаСтойка регистрации попросила должность, и я использовал Axios.var path = require ("path")

 module.exports = { 
   outputDir : path.resolve(__dirname, "../backend/public/"),
   devServer: 
      { proxy: 
         { 
           '/api': { 
               target: 'http://localhost:3000/api', 
               changeOrigin: true , 
               pathRewrite:{ 
                "^/api" : '' 
               } 
           }

       } 
      }

Это часть app.js.Я сделал базовые настройки через документ паспорта и использовал passport-local-mongoose в качестве своей стратегии аутентификации.

app.use(require('express-session')({
    secret:"rtyhsx2",
    resave:false,
    saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new localStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

user.js

var mongoose = require('mongoose');
var passportLocalMongoose = require('passport-local-mongoose');

var userSchema  = new mongoose.Schema({
    username: String,
    password: String
});
userSchema.plugin(passportLocalMongoose);

module.exports = mongoose.model('User',userSchema);
...