七夕杯—密码签到
发布人:shili8
发布时间:2025-01-11 06:52
阅读次数:0
**七夕杯——密码签到**
**概述**
七夕杯是由中国计算机协会主办的一项网络安全竞赛活动。作为一名参与者,我决定开发一个密码签到的系统,以便于参加比赛的选手能够轻松地完成签到流程。
**系统设计**
本系统将使用以下技术栈:
* 后端:Node.js + Express.js* 前端:HTML + CSS + JavaScript (Vue.js)
* 数据库:MongoDB**后端开发**
首先,我们需要在 Node.js 中创建一个新项目,并安装所需的依赖项。
bashnpm init -ynpm install express body-parser mongoose
接下来,我们可以开始编写后端代码。我们将使用 Express.js 来处理 HTTP 请求,body-parser 来解析请求体,mongoose 来与 MongoDB 进行交互。
javascript// app.jsconst express = require('express'); const bodyParser = require('body-parser'); const mongoose = require('mongoose'); const app = express(); app.use(bodyParser.json()); mongoose.connect('mongodb://localhost/seventhnight', { useNewUrlParser: true, useUnifiedTopology: true }); const User = mongoose.model('User', { username: String, password: String}); // GET /signinapp.get('/signin', (req, res) => { res.render('signin'); }); // POST /signinapp.post('/signin', async (req, res) => { const { username, password } = req.body; const user = await User.findOne({ username }); if (!user || user.password !== password) { return res.status(401).send({ message: 'Invalid username or password' }); } // Sign in successfully}); // GET /signupapp.get('/signup', (req, res) => { res.render('signup'); }); // POST /signupapp.post('/signup', async (req, res) => { const { username, password } = req.body; const user = await User.findOne({ username }); if (user) { return res.status(400).send({ message: 'Username already exists' }); } // Create new user}); app.listen(3000, () => { console.log('Server listening on port3000'); });
**前端开发**
接下来,我们需要在 Vue.js 中创建一个新项目,并安装所需的依赖项。
bashnpm init -ynpm install vue-router vue-resource axios
然后,我们可以开始编写前端代码。我们将使用 Vue Router 来管理路由,vue-resource 来与后端进行交互,axios 来发送 HTTP 请求。
javascript// main.jsimport Vue from 'vue'; import App from './App.vue'; import router from './router'; Vue.config.productionTips = false; new Vue({ render: h => h(App), }).$mount('#app'); // router/index.jsimport Vue from 'vue'; import Router from 'vue-router'; import signin from '../views/signin.vue'; import signup from '../views/signup.vue'; Vue.use(Router); export default new Router({ routes: [ { path: '/signin', name: 'Sign in', component: signin }, { path: '/signup', name: 'Sign up', component: signup } ] }); // views/signin.vue<template> <div> <h1>Sign in</h1> <form @submit.prevent="signin"> <input type="text" v-model="username" placeholder="Username"> <input type="password" v-model="password" placeholder="Password"> <button type="submit">Sign in</button> </form> </div> </template> <script> export default { data() { return { username: '', password: '' }; }, methods: { signin() { axios.post('/signin', { username, password }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); } } }; </script> // views/signup.vue<template> <div> <h1>Sign up</h1> <form @submit.prevent="signup"> <input type="text" v-model="username" placeholder="Username"> <input type="password" v-model="password" placeholder="Password"> <button type="submit">Sign up</button> </form> </div> </template> <script> export default { data() { return { username: '', password: '' }; }, methods: { signup() { axios.post('/signup', { username, password }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); } } }; </script>
**测试**
最后,我们可以使用 Postman 或 curl 来测试我们的 API。
bashcurl -X GET -X POST -H "Content-Type: application/json" -d '{"username": "john", "password": "123456"}' -X GET -X POST -H "Content-Type: application/json" -d '{"username": "jane", "password": "654321"}' /> **总结** 在本文中,我们开发了一个密码签到的系统,使用 Node.js + Express.js 作为后端技术栈,Vue.js + Vue Router + vue-resource + axios 作为前端技术栈。我们使用 MongoDB 来存储用户信息,并使用 Postman 或 curl 来测试我们的 API。