Я пытаюсь создать базовое приложение для входа / регистрации, используя Vue, Express, Node и MongoDB. Я успешно настроил маршрутизатор Express, чтобы разрешить регистрацию и вход в систему пользователей, при этом базовая информация о пользователях сохранена в MongoDB. Я пытаюсь вернуть пользовательские данные обратно на экран после входа в систему. До сих пор я настроил router.get()
в Express, чтобы вернуть имя пользователя всех пользователей обратно на экран. Однако я хочу настроить метод axios.get()
в Vue.js так, чтобы он возвращал только имя пользователя вошедшего в систему пользователя, а не все имена пользователей, хранящиеся в MongoDB. Обычно в Firebase я бы использовал что-то вроде let snapshot = await ref.where('userid', '==', firebase.auth().currentUser.uid).get()
, чтобы отправить обратно информацию исключительно о текущем пользователе. Как мне настроить мой axios.get()
метод для выполнения чего-то подобного? Мой код ниже:
залогиненая страница
<template>
<b-row>
<b-col cols="12">
<h2>
You are now logged in!
<b-link @click="logout()">(Logout)</b-link>
</h2>
<table style="width:100%">
<tr>
<th>User Names</th>
</tr>
<tr v-for="user in users" :key="user._id">
<td>{{ user.username }}</td>
</tr>
</table>
<ul v-if="errors && errors.length">
<li v-for="error of errors" :key="error._id">
<b-alert show>{{error.message}}</b-alert>
</li>
</ul>
</b-col>
</b-row>
</template>
<script>
import axios from 'axios'
export default {
name: 'BookList',
data () {
return {
users: [],
errors: []
}
},
created () {
axios.defaults.headers.common['Authorization'] = localStorage.getItem('jwtToken')
axios.get(`http://localhost:3000/api/auth`)
.then(response => {
this.users = response.data
})
},
methods: {
logout () {
localStorage.removeItem('jwtToken')
this.$router.push({
name: 'Login'
})
}
}
}
</script>
GET-маршрут в Express
router.get('/', function(req, res) {
User.find(function (err, products) {
if (err) return next(err);
res.json(products);
});
});
User.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var bcrypt = require('bcryptjs');
var UserSchema = new Schema({
username: {
type: String,
unique: true,
required: true
},
password: {
type: String,
required: true
}
});
UserSchema.pre('save', function (next) {
var user = this;
if (this.isModified('password') || this.isNew) {
bcrypt.genSalt(10, function (err, salt) {
if (err) {
return next(err);
}
bcrypt.hash(user.password, salt, null, function (err, hash) {
if (err) {
return next(err);
}
user.password = hash;
next();
});
});
} else {
return next();
}
});
UserSchema.methods.comparePassword = function (passw, cb) {
bcrypt.compare(passw, this.password, function (err, isMatch) {
if (err) {
return cb(err);
}
cb(null, isMatch);
});
};
module.exports = mongoose.model('User', UserSchema);
Зарегистрировать маршрут
router.post('/register', function(req, res) {
if (!req.body.username || !req.body.password) {
res.json({success: false, msg: 'Please pass username and password.'});
} else {
var newUser = new User({
username: req.body.username,
password: req.body.password
});
// save the user
newUser.save(function(err) {
if (err) {
return res.json({success: false, msg: 'Username already exists.'});
}
res.json({success: true, msg: 'Successful created new user.'});
});
}
});