登录
This commit is contained in:
@@ -57,59 +57,64 @@ public sealed class AuthController(
|
||||
{
|
||||
var name = request.Name.Trim();
|
||||
var studentNumber = request.StudentNumber.Trim();
|
||||
var student = await db.Students
|
||||
.Include(x => x.AdministrativeClass)
|
||||
.ThenInclude(x => x!.Major)
|
||||
.FirstOrDefaultAsync(x =>
|
||||
x.Status == StudentStatus.Active &&
|
||||
x.Name == name &&
|
||||
x.StudentNumber == studentNumber &&
|
||||
x.EnrollmentYear == request.Grade &&
|
||||
x.AdministrativeClassId == request.AdministrativeClassId &&
|
||||
x.AdministrativeClass!.Grade == request.Grade &&
|
||||
x.AdministrativeClass.MajorId == request.MajorId &&
|
||||
x.AdministrativeClass.Major!.CollegeId == request.CollegeId,
|
||||
cancellationToken);
|
||||
if (student is null)
|
||||
return ActivationProblem(
|
||||
"填写的信息与在籍学生档案不完全一致,请核对后重试。",
|
||||
StatusCodes.Status400BadRequest);
|
||||
if (student.UserId.HasValue)
|
||||
return ActivationProblem(
|
||||
"该学号已经激活,请直接登录;如忘记密码请联系管理员重置。",
|
||||
StatusCodes.Status409Conflict);
|
||||
if (await userManager.FindByNameAsync(studentNumber) is not null)
|
||||
return ActivationProblem(
|
||||
"该学号已有登录账号但未正确关联,请联系管理员处理。",
|
||||
StatusCodes.Status409Conflict);
|
||||
var executionStrategy = db.Database.CreateExecutionStrategy();
|
||||
return await executionStrategy.ExecuteAsync<ActionResult>(async () =>
|
||||
{
|
||||
var student = await db.Students
|
||||
.Include(x => x.AdministrativeClass)
|
||||
.ThenInclude(x => x!.Major)
|
||||
.FirstOrDefaultAsync(x =>
|
||||
x.Status == StudentStatus.Active &&
|
||||
x.Name == name &&
|
||||
x.StudentNumber == studentNumber &&
|
||||
x.EnrollmentYear == request.Grade &&
|
||||
x.AdministrativeClassId == request.AdministrativeClassId &&
|
||||
x.AdministrativeClass!.Grade == request.Grade &&
|
||||
x.AdministrativeClass.MajorId == request.MajorId &&
|
||||
x.AdministrativeClass.Major!.CollegeId == request.CollegeId,
|
||||
cancellationToken);
|
||||
if (student is null)
|
||||
return ActivationProblem(
|
||||
"填写的信息与在籍学生档案不完全一致,请核对后重试。",
|
||||
StatusCodes.Status400BadRequest);
|
||||
if (student.UserId.HasValue)
|
||||
return ActivationProblem(
|
||||
"该学号已经激活,请直接登录;如忘记密码请联系管理员重置。",
|
||||
StatusCodes.Status409Conflict);
|
||||
if (await userManager.FindByNameAsync(studentNumber) is not null)
|
||||
return ActivationProblem(
|
||||
"该学号已有登录账号但未正确关联,请联系管理员处理。",
|
||||
StatusCodes.Status409Conflict);
|
||||
|
||||
await using var transaction = await db.Database.BeginTransactionAsync(cancellationToken);
|
||||
var user = new ApplicationUser
|
||||
{
|
||||
UserName = studentNumber,
|
||||
DisplayName = student.Name,
|
||||
StaffNumber = studentNumber,
|
||||
CollegeId = request.CollegeId,
|
||||
IsEnabled = true,
|
||||
LockoutEnabled = true
|
||||
};
|
||||
var result = await userManager.CreateAsync(user, request.Password);
|
||||
if (!result.Succeeded)
|
||||
{
|
||||
await transaction.RollbackAsync(cancellationToken);
|
||||
return IdentityValidationProblem(result);
|
||||
}
|
||||
result = await userManager.AddToRoleAsync(user, SystemRoles.Student);
|
||||
if (!result.Succeeded)
|
||||
{
|
||||
await transaction.RollbackAsync(cancellationToken);
|
||||
return IdentityValidationProblem(result);
|
||||
}
|
||||
await using var transaction =
|
||||
await db.Database.BeginTransactionAsync(cancellationToken);
|
||||
var user = new ApplicationUser
|
||||
{
|
||||
UserName = studentNumber,
|
||||
DisplayName = student.Name,
|
||||
StaffNumber = studentNumber,
|
||||
CollegeId = request.CollegeId,
|
||||
IsEnabled = true,
|
||||
LockoutEnabled = true
|
||||
};
|
||||
var result = await userManager.CreateAsync(user, request.Password);
|
||||
if (!result.Succeeded)
|
||||
{
|
||||
await transaction.RollbackAsync(cancellationToken);
|
||||
return IdentityValidationProblem(result);
|
||||
}
|
||||
result = await userManager.AddToRoleAsync(user, SystemRoles.Student);
|
||||
if (!result.Succeeded)
|
||||
{
|
||||
await transaction.RollbackAsync(cancellationToken);
|
||||
return IdentityValidationProblem(result);
|
||||
}
|
||||
|
||||
student.UserId = user.Id;
|
||||
await db.SaveChangesAsync(cancellationToken);
|
||||
await transaction.CommitAsync(cancellationToken);
|
||||
return Ok(new { UserName = studentNumber });
|
||||
student.UserId = user.Id;
|
||||
await db.SaveChangesAsync(cancellationToken);
|
||||
await transaction.CommitAsync(cancellationToken);
|
||||
return Ok(new { UserName = studentNumber });
|
||||
});
|
||||
}
|
||||
|
||||
[AllowAnonymous]
|
||||
|
||||
Reference in New Issue
Block a user