backend/ExamKing.WebApp.Admin/ApiController/ManageController.cs
(开头部分) 5KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using ExamKing.Application.Mappers;
using ExamKing.Application.Services;
using Furion;
using Furion.Authorization;
using Furion.DataEncryption;
using Mapster;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.IdentityModel.JsonWebTokens;
namespace ExamKing.WebApp.Admin
{
/// <summary>
/// 管理员接口
/// </summary>
public class ManageController : ApiControllerBase
{
private readonly IManageService _manageService;
/// <summary>
/// 构造函数
/// </summary>
public ManageController(IManageService manageService)
{
_manageService = manageService;
}
/// <summary>
/// 管理员登录
/// </summary>
/// <param name="loginAdminInput"></param>
/// <returns></returns>
[AllowAnonymous]
public async Task<LoginAdminOutput> PostLogin(LoginAdminInput loginAdminInput)
{
var admin = await _manageService.LoginAdmin(loginAdminInput.Adapt<AdminDto>());
var output = admin.Adapt<LoginAdminOutput>();
// 生成 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", admin.Id}, // 存储Id
{"IsAdmin", true}, // 管理员登录
{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}
});
后面还有 92 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。