john 8 mesi fa
parent
commit
1930274460

+ 2 - 1
.gitignore

@@ -1,3 +1,4 @@
 node_modules
 base_files/*
-*.tar
+*.tar
+.idea

+ 6 - 0
frontEndMobile/src/api/http.ts

@@ -38,12 +38,15 @@ http.interceptors.request.use(
 // 响应拦截器
 http.interceptors.response.use(
   (response) => {
+    
     // 响应成功关闭进度条
     nProgress.done()
+    
     // 对响应数据做点什么
     return response.data
   },
   (error) => {
+    console.log(47);
     // 请求超时处理
     if (error.message.includes('timeout')) {
       alert('请求超时')
@@ -62,6 +65,9 @@ http.interceptors.response.use(
         console.log('请求错误')
         break
       case 401:
+        router.push({
+          name: 'login'
+        })
         console.log('未授权')
         break
       case 403:

+ 122 - 35
frontEndMobile/src/views/LoginPage.vue

@@ -1,39 +1,126 @@
 <template>
-    <div>
-      <van-form @submit="onSubmit">
-        <van-cell-group inset>
-          <van-field
-            v-model="username"
-            name="用户名"
-            label="用户名"
-            placeholder="用户名"
-            :rules="[{ required: true, message: '请填写用户名' }]"
-          />
-          <van-field
-            v-model="password"
-            type="password"
-            name="密码"
-            label="密码"
-            placeholder="密码"
-            :rules="[{ required: true, message: '请填写密码' }]"
-          />
-        </van-cell-group>
-        <div style="margin: 16px">
-          <van-button round block type="primary" native-type="submit">
-            提交
-          </van-button>
-        </div>
-      </van-form>
-    </div>
-  </template>
-
-  <script setup>
-  import { ref } from 'vue'
-  const password = ref('')
-  const username = ref('')
-
-  function onSubmit() {
+  <div class="login-box">
+    <van-form @submit="onSubmit" v-if="!isRegister">
+      <van-cell-group inset>
+        <van-field
+          v-model="account"
+          name="account"
+          label="用户名"
+          placeholder="用户名"
+          :rules="[{ required: true, message: '请填写用户名' }]"
+        />
+        <van-field
+          v-model="password"
+          type="password"
+          name="password"
+          label="密码"
+          placeholder="密码"
+          :rules="[{ required: true, message: '请填写密码' }]"
+        />
+      </van-cell-group>
+      <div style="margin: 16px">
+        <van-button round block type="primary" native-type="submit">
+          提交
+        </van-button>
+        <div class="register-btn" @click="isRegister = true">注册</div>
+      </div>
+    </van-form>
 
+    <van-form @submit="onRegisterSubmit" v-else>
+      <van-cell-group inset>
+        <van-field
+          v-model="account"
+          name="account"
+          label="账号"
+          placeholder="账号"
+          :rules="[{ required: true, message: '请填写账号' }]"
+        /> <van-field
+          v-model="name"
+          name="name"
+          label="用户名"
+          placeholder="用户名"
+          :rules="[{ required: true, message: '请填写用户名' }]"
+        />
+        <van-field
+          v-model="password"
+          type="password"
+          name="password"
+          label="密码"
+          placeholder="密码"
+          :rules="[{ required: true, message: '请填写密码' }]"
+        />
+        <van-field
+          v-model="againPassword"
+          type="password"
+          name="againPassword"
+          label="密码"
+          placeholder="密码"
+          :rules="[{ required: true, message: '请再次填写密码' }]"
+        />
+      </van-cell-group>
+      <div style="margin: 16px">
+        <van-button round block type="primary" native-type="submit">
+          提交
+        </van-button>
+        <div class="register-btn" @click="isRegister = false">去登录</div>
+      </div>
+    </van-form>
+  </div>
+</template>
+
+<script setup>
+import { ref } from 'vue'
+import { register, login } from '@/api/base'
+import { showSuccessToast, showFailToast } from 'vant'
+import { useRouter, useRoute } from 'vue-router'
+
+const password = ref('')
+const againPassword = ref('')
+const account = ref('')
+const name = ref('')
+const isRegister = ref(false)
+const router = useRouter()
+
+async function onSubmit (params) {
+  const res = await login(params)
+  if (res.code === 200) {
+    showSuccessToast('登录成功');
+    window.localStorage.setItem('token', res.data.token)
+  } else {
+    showFailToast('登录失败')
+  }
+}
+
+async function onRegisterSubmit (params) {
+  if(params.password !== params.againPassword) {
+    showFailToast('2次输入的密码不一样')
+    return 
+  }
+  const res = await register({
+    ...params,
+    account_type: params.password.indexOf('@') > -1 ? 2 : 1
+  })
+  if (res.code === 200) {
+    showSuccessToast('注册成功');
+    console.log(104, res);
+    window.localStorage.setItem('token', res.data.token)
+    router.push('/')
+  } else {
+    showFailToast('注册失败')
   }
+}
+</script>
+
+<style scoped lang="scss">
+
+.login-box {
+  padding-top: 20px;
+}
 
-  </script>
+.register-btn {
+  margin-top: 12px;
+  color: var(--van-button-primary-background);
+  font-size: 14px;
+  font-weight: bold;
+}
+</style>

+ 13 - 23
node_expores/db/auth.js

@@ -3,9 +3,7 @@ import connection from "./base.js";
 export async function auth_insert({
   name = "",
   user_id = "",
-  login_type,
-  email = "",
-  mobile = "",
+  account = "",
   password = "",
   create_time = "",
   update_time = "",
@@ -13,23 +11,21 @@ export async function auth_insert({
   return new Promise(async (resolve, reject) => {
     try {
       const sql = `
-        INSERT INTO authors (name, user_id, login_type, email, mobile, password, create_time, update_time)
-        VALUES (?, ?, ?, ?, ?, ?, ?, ?)
+        INSERT INTO authors (name, user_id, account, password, create_time, update_time)
+        VALUES (?, ?, ?, ?, ?, ?)
       `;
       const values = [
         name,
         user_id,
-        login_type,
-        email,
-        mobile,
+        account,
         password,
         create_time,
         update_time,
       ];
       // 直接接收 execute 返回的内容
-      const result = await connection.execute(sql, values);
-      // console.log("Record inserted successfully:", result);
-      return resolve(result);
+      connection.execute(sql, values, (result, fields) => {
+        return resolve(fields);
+      });
     } catch (err) {
       console.error("Error inserting data:", err);
       // throw err;
@@ -39,11 +35,11 @@ export async function auth_insert({
 }
 
 // 是否存在重复的数据
-export function isHaveUserByUserId({ user_id = "", mobile = "", email = "" }) {
+export function isHaveUserByUserId({ user_id = "", account = ""}) {
   return new Promise((resolve, reject) => {
     connection.query(
-      `SELECT * FROM authors WHERE user_id = ? OR mobile = ? OR email = ?`,
-      [user_id, mobile, email],
+      `SELECT * FROM authors WHERE user_id = ? OR account = ?`,
+      [user_id, account],
       (err, rows) => {
         if (err) {
           // reject(err);
@@ -76,19 +72,13 @@ export function getUserInfoByuserId(user_id) {
 
 // 用户是否已经注册
 export function isLoginUserByUserId({
-  mobile = "",
-  email = "",
+  account = "",
   password = "",
 }) {
-  console.log(7979, {
-    mobile,
-    email,
-    password,
-  });
   return new Promise((resolve, reject) => {
     connection.query(
-      `SELECT * FROM authors WHERE password = ? AND (mobile = ? OR email = ? )`,
-      [password, mobile, email],
+      `SELECT * FROM authors WHERE password = ? AND account = ?`,
+      [password, account],
       (err, rows) => {
         if (err) {
           // reject(err);

+ 7 - 0
node_expores/db/update.sql

@@ -0,0 +1,7 @@
+ALTER TABLE cashbook.authors MODIFY COLUMN id int NOT NULL AUTO_INCREMENT;
+
+ALTER TABLE cashbook.authors DROP KEY authors_unique_1;
+ALTER TABLE cashbook.authors DROP COLUMN mobile;
+ALTER TABLE cashbook.authors CHANGE email account varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL;
+ALTER TABLE cashbook.authors DROP COLUMN login_type;
+

+ 7 - 7
node_expores/environment/index.js

@@ -1,12 +1,12 @@
 function dbInfo() {
   // 根据需要更新db的数据配置
-  // return {
-  //   host: "localhost",
-  //   port: 3306,
-  //   user: "root",
-  //   password: "12345678",
-  //   database: "cashbook",
-  // };
+  return {
+    host: "localhost",
+    port: 3306,
+    user: "root",
+    password: "12345678",
+    database: "cashbook",
+  };
   return {
     host: "192.168.2.101",
     port: 6806,

+ 28 - 20
node_expores/router/authors/index.js

@@ -13,11 +13,9 @@ router.use(function timeLog(req, res, next) {
 
 // 注册
 router.post("/register", async function (req, res) {
-  const { account, name = "", password = "", account_type } = req.body;
-
+  const { account, name = "", password = "" } = req.body;
   const user_id = uuidv4();
-
-  if (await isHaveUserByUserId({ user_id, mobile: account, email: account })) {
+  if (await isHaveUserByUserId({ user_id, account,})) {
     res.send({
       code: 500,
       msg: "当前注册信息有重复,请检查之后重新提交!",
@@ -25,40 +23,50 @@ router.post("/register", async function (req, res) {
     return;
   }
   // 写入数据
-  const insertInfo = await auth_insert({
+  await auth_insert({
     name,
+    account,
     user_id,
-    login_type: account_type,
-    email: account_type === 1 ? "" : account,
-    mobile: account_type === 2 ? "" : account,
     password: aes_encrypt(password),
     create_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"),
     update_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"),
   });
-  res.send("注册成功,请重新登陆!");
+
+  const token = await getToken(account, password)
+  res.json({
+    code: 200,
+    data: {
+      token
+    }
+  });
 });
 
-// 登陆
-router.post("/", async function (req, res) {
-  const { account, account_type, password } = req.body;
+async function getToken(account, password) {
   const islogin = await isLoginUserByUserId({
     password: aes_encrypt(password),
-    email: account,
-    mobile: account,
+    account,
   });
+  if(!islogin) return false
+  delete islogin.password;
+  delete islogin.login_type;
+  delete islogin.id;
+  return generateToken(islogin);
+}
+
+// 登陆
+router.post("/", async function (req, res) {
+  const { account, password } = req.body;
+  
+  const token = await getToken(account, password);
 
-  if (!islogin) {
-    res.status(404).json({
+  if (!token) {
+    res.json({
       code: 404,
       msg: "登录失败,当前用户不存在",
       data: {},
     });
     return;
   }
-  delete islogin.password;
-  delete islogin.login_type;
-  delete islogin.id;
-  const token = generateToken(islogin);
   res.json({
     code: 200,
     msg: "登录成功",

+ 6 - 5
node_expores/utils/authorization.js

@@ -9,8 +9,8 @@ export function generateToken(payload) {
     jwt.sign(payload, secretKey, {
       // expiresIn: 60 * 60 * 24 * 7 * 4 * 12, // 一年过期
       // expiresIn: 60 * 60 * 24 * 7 * 4, // 一个月
-      // expiresIn: 60 * 60 * 24 * 7, // 一周
-      expiresIn: 60 * 60 * 24, // 一天
+      expiresIn: 60 * 60 * 24 * 7, // 一周
+      // expiresIn: 60 * 60 * 24, // 一天
       // expiresIn: 60 * 60, // 一个小时
     }, environment.privateKey, { algorithm: 'RS256' });
 
@@ -20,14 +20,15 @@ export function generateToken(payload) {
 // 验证token
 export function verifyToken(req, res, next) {
   console.log(22, req.headers.authorization);
+  if(!req.headers.authorization) {
+    return res.status(401).json({ code: "401", msg: "token无效" });
+  }
   const token = req.headers.authorization.split(" ")[1];
   jwt.verify(token, secretKey, function (err, decoded) {
     if (err) {
       console.log("verify error", err);
-      return res.json({ code: "404", msg: "token无效" });
+      return res.status(401).json({ code: "401", msg: "token无效" });
     }
-    console.log(29292, decoded);
-    
     req.body.userInfo = decoded
     next();
   });