标签:登入 username studentData 15 毕业设计 从零开始 student using message
更新时间:2021年1月27日
昨天历经千辛万苦将系统进行了还原
今天正式开始操作
目标:
登入,注册,退出登录,模块
base控制器验证模块
前端登入注册模块
后端
关于登入注册这种东西,已经不知道弄了多少次了,现在再弄,简直就是小菜一叠,进度进展的飞快,一步到位!
登录,注册,退出处理控制器:
using CC.GraduationProject.Common;
using CC.GraduationProject.IBLL;
using CC.GraduationProject.Model;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace CC.GraduationProject.API.Controllers
{
[Route("[controller]/[action]")]
[ApiController]
public class AccountController : BaseController
{
private IstudentBll _studentBll;
private IteacherBll _teacherBll;
public AccountController(IstudentBll studentBll, IteacherBll teacherBll)
{
IsCheck = 0;
_studentBll = studentBll;
_teacherBll = teacherBll;
}
[HttpPost]
public async Task<IActionResult> Login([FromForm] string username, [FromForm] string pwd)//处理登录模块
{
//var studentData = await _studentBll.GetEntities(u => u.student_username == username).FirstOrDefaultAsync();
//if (studentData == null)
//{
// var teacherData = await _teacherBll.GetEntities(u => u.teacher_username == username).FirstOrDefaultAsync();
// if (teacherData == null)
// {
// return Content(JsonFactory.Json(message: "用户名或者密码错误", flag: false));//登入失败,教师学生都没有
// }
// else
// {
// if (teacherData.teacher_password == pwd)
// {
// HttpContext.Session.SetString("teacherId", teacherData.id.ToString());
// return Content(JsonFactory.Json(message: "欢迎!" + teacherData.teacher_username));//教师登入成功
// }
// else
// {
// return Content(JsonFactory.Json(message: "用户名或者密码错误", flag: false));
// }
// }
//}
//else
//{
// if (studentData.student_password == pwd)
// {
// HttpContext.Session.SetString("studenId", studentData.id.ToString());
// return Content(JsonFactory.Json(message: "欢迎!" + studentData.student_username));//学生登入成功
// }
// else//密码错误
// {
// return Content(JsonFactory.Json(message: "用户名或者密码错误", flag: false));
// }
//}
var studentData = await _studentBll.GetEntities(u => u.student_username == username).FirstOrDefaultAsync();
if (studentData != null)
{
if (studentData.student_password == pwd)
{
HttpContext.Session.SetString("studentId", studentData.id.ToString());
return Content(JsonFactory.Json(message: "欢迎!" + studentData.student_username,data:0));//学生登入成功
}
}
else
{
var teacherData = await _teacherBll.GetEntities(u => u.teacher_username == username).FirstOrDefaultAsync();
if (teacherData != null)
{
if (teacherData.teacher_password == pwd)
{
HttpContext.Session.SetString("teacherId", teacherData.id.ToString());
return Content(JsonFactory.Json(message: "欢迎您!" + teacherData.teacher_username,data:1));//教师登入成功
}
}
}
return Content(JsonFactory.Json(message: "用户名或者密码错误", flag: false));
}
[HttpPost]
public IActionResult Register([FromForm] string student_number, [FromForm] string student_name,[FromForm] string student_class,[FromForm] int student_age,[FromForm]string student_mailbox,[FromForm]string student_phone,[FromForm]string student_username,[FromForm]string pwd)
{
student studentData = new student();
studentData.student_age = student_age;
studentData.student_class = student_class;
studentData.student_mailbox = student_mailbox;
studentData.student_name = student_name;
studentData.student_number = student_number;
studentData.student_phone = student_phone;
studentData.student_username = student_username;
studentData.student_password = pwd;
_studentBll.Add(studentData);
return Redirect("/Login");
}
[HttpPost]
public ActionResult LogOff()
{
HttpContext.Session.Clear();
return Content(JsonFactory.Json(message: "安全退出成功!"));
}
}
}
注释的地方,是我写的第一版,可阅性比较差,所以我修改成了现在这种
关于base控制器也写好了
using CC.GraduationProject.Common;
using CC.GraduationProject.Model;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace CC.GraduationProject.API.Controllers
{
public class BaseController : Controller//使用.netcore管道
{
public int IsCheck = 1;//设置是否需要校验用户是否登录属性
public int studentId = 0;//0代表没有
public int teacherId = 0;
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
switch (IsCheck)
{
case 1://表示学生获得教师登入需要检验
var data1 = HttpContext.Session.GetString("studentId");
var data2 = HttpContext.Session.GetString("teacherId");
if (data1 != null || data2 != null)//表示已经登入过
{
studentId = Convert.ToInt32(data1);
teacherId = Convert.ToInt32(data2);
}
else
{
filterContext.Result = Content(JsonFactory.Json(message: "登录已过期", flag: false));
}
break;
case 0:
return;
}
}
}
}
所有控制器继承于这个base,如果不需要验证,只需要在构造函数里面将ischeck改成0即可
例如:
由于继承了这个控制器,我们直接可以在子类控制器获取
public int studentId = 0;
public int teacherId = 0;
很舒服,现在数据不是写死的了!
这个地方,还涉及到了一点,关于.netcore的中间件使用,管道,过滤器
public override void OnActionExecuting(ActionExecutingContext filterContext)
问题也不大
使用api操作一下,发现了都没有问题了,基本调试完毕!
现在开始前端操作
由于界面的话,我并不太感冒
就先用表单代替吧
对了,后续登入得加验证码,这里先留个坑
前端
花了2分钟,做了一个简易的表单
<template>
<div class="loginForm shadow-lg">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<el-form-item label="用户" prop="username">
<el-input v-model="ruleForm.username" placeholder="请输入用户名"></el-input>
</el-form-item>
<el-form-item label="密码" prop="pwd" >
<el-input v-model="ruleForm.pwd" placeholder="请输入密码"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')">登入</el-button>
<el-button @click="resetForm('ruleForm')">重置</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
export default {
data() {
return {
ruleForm: {
username: '',
pwd: '',
},
rules: {
username: [
{ required: true, message: '用户名不能为空', trigger: 'blur' },
{ min: 3, max: 20, message: '长度在 3 到 20 个字符', trigger: 'blur' }
],
pwd: [
{ required: true, message: '密码不能为空', trigger: 'blur' },
{ min: 3, max: 20, message: '长度在 3 到 20 个字符', trigger: 'blur' }
]
}
};
},
methods: {
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
alert('submit!');
} else {
console.log('error submit!!');
return false;
}
});
},
resetForm(formName) {
this.$refs[formName].resetFields();
}
}
}
</script>
<style scoped>
.loginForm{
width: 500px;
height: 500px;
position:absolute;
top: 50%;
left: 50%;
margin-left: -250px;
margin-top: -250px;
background: white;
padding: 30px;
padding-left: 50px;
padding-right: 50px;
}
</style>>
我们这里采用axios异步请求吧
那我们应该还得写一个api
运行一下果然出问题了
看一下报错
小问题
应该加this的
看看后端
数据已经读取到了
那一切没有问题
前端通过存储一个logged来判断是教师登入还是学生登入
0表示学生,1表示教师
然后在导航栏的时候改一下根据这个本地存储进行隐藏
现在登入有3种情况
1:用户或者密码错误
2:乱写,直接前端拦截
3:登入成功
登入成功将添加一个本地存储,键为logged
ok
导航栏
没问题
安全退出登入
运行一下
发现出了405的报错
果然是请求类型不同
这里应该为post请求
ok!
关于注册模块,一样的原理,一样一样的,暂时留个坑
不过现在出了一个问题
当我使用我新创建的学生账号的时候,我发现,并没有数据
这个应该是一个挺大的问题
分析问题:
这个学生为刚刚创建的测试学生,应该是没有选择任何课程的
在学生课程数据是正确的
但问题就是,在选择课程的地方,也没有课程!
这里的逻辑是,两个请求,一个请求所有一共有什么课程,一个是该名学生有什么课程
该学生的课程
一共有的课程
然后进行相减,就是可以选择的课程
结果出问题了
我们来看一下控制台
报错!
item is null
前端没发现问题,倒是后端发现了一个严重的问题
由于
isresult是后加的字段,所以,在查询的时候,应该排除is result为0的字段
表示正在审核,要加一个条件,is result为1 才行
后端这里添加一个条件
起飞!
这感觉!
BUG并不可怕,可怕的是,你不知道哪来的BUG
我来思考一下,为什么会造成这个原因
这里是遍历的item地方
也就是说,问题出在这里
这里是和后端数据交互的地方
那我们看看后端
如果我没有添加is_result的条件
那,返回的是
?????
????
???
??
?
为什么?重新运行一次,就和第一次运行的结果不一样???
第一次运行还报错了,这次为什么什么事都没有???
我吐了
这神奇的bug!
今天,就到这里了,期待下次与你相见!
标签:登入,username,studentData,15,毕业设计,从零开始,student,using,message 来源: https://blog.csdn.net/QAQQVQQTQ/article/details/113266654
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。