backend/ExamKing.WebApp.Teacher/Controllers/TeacherController.cs

(开头部分) 3KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using ExamKing.Application.Mappers;
using ExamKing.Application.Services;
using Mapster;
using Furion;
using Furion.Authorization;
using Furion.DataEncryption;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.IdentityModel.JsonWebTokens;

namespace ExamKing.WebApp.Teacher
{
    /// <summary>
    /// 教师接口
    /// </summary>
    public class TeacherController : ApiControllerBase
    {
        private readonly ITeacherService _teacherService;
        /// <summary>
        /// 依赖注入
        /// </summary>
        public TeacherController(ITeacherService teacherService)
        {
            _teacherService = teacherService;
        }

        /// <summary>
        /// 教师登录
        /// </summary>
        /// <param name="teacherLoginInput"></param>
        /// <returns></returns>
        [AllowAnonymous]
        public async Task<TeacherLoginOutput> PostLogin(TeacherLoginInput teacherLoginInput)
        {
            var teacher = await _teacherService.LoginTeacher(teacherLoginInput.TeacherNo, teacherLoginInput.Password);
            var output = teacher.Adapt<TeacherLoginOutput>();
            // 生成 token
            var jwtSettings = App.GetOptions<JWTSettingsOptions>();
            var datetimeOffset = new DateTimeOffset(DateTime.Now);
            if (jwtSettings.ExpiredTime != null)
                output.AccessToken = JWTEncryption.Encrypt(jwtSettings.IssuerSigningKey,
                    new Dictionary<string, object>()
                    {
                        {"UserId", teacher.Id}, // 存储Id
                        {JwtRegisteredClaimNames.Iat, datetimeOffset.ToUnixTimeSeconds()},
                        {JwtRegisteredClaimNames.Nbf, datetimeOffset.ToUnixTimeSeconds()},
                        {
                            JwtRegisteredClaimNames.Exp,
                            new DateTimeOffset(
                                    DateTime.Now.AddSeconds(
                                        jwtSettings.ExpiredTime.Value * 60 * 60 * 24 * 30))
                                .ToUnixTimeSeconds()
                        },
                        {JwtRegisteredClaimNames.Iss, jwtSettings.ValidIssuer},
                        {JwtRegisteredClaimNames.Aud, jwtSettings.ValidAudience}
                    });
            // 设置 Swagger 刷新自动授权
后面还有 36 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。