我如何管理此终端?我没有创建任何控制器.什么时候
我想注册,请求模型是这样的
那么,您可以引入您自己的viewModel来实现这一点.您只需创建具有两个属性的模型,然后使用该viewModel定义控制器.下面让我们来看看:
视图模型:
public class RegisterModel
{
[Required]
public string Email { get; set; }
[Required]
public string Password { get; set; }
}
控制器:
现在,使用RegisterModel
作为您要在调用此终结点时传递的控制器签名.让我们来看看实践:
[ApiController]
[Route("api/[controller]")]
public class RegisterController : Controller
{
private readonly UserManager<ApplicationUser> _userManager;
public RegisterController(UserManager<ApplicationUser> userManager)
{
_userManager = userManager;
}
[HttpPost("register")]
public async Task<IActionResult> Register([FromBody] RegisterModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser
{
UserName = model.Email,
Email = model.Email
};
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
//If the User registration successful
//Here You can generate and return a JWT token here if needed
return Ok(new { Message = "Registration successful" });
}
else
{
return BadRequest(new { Errors = result.Errors });
}
}
return BadRequest(new { Message = "Invalid registration data" });
}
}
Note:我正在为ASP.NET核心的MVC应用程序做身份识别,如果你需要JWT,我已经在代码片段中注释了你CNA返回JWT以及.
我想添加一些个人信息,如地址、性别、
名字、姓氏等.我可以自定义此标识模型吗?
是的,您可以做到这一点,您所需要的就是一个覆盖IdentityUser
类的新类.您可以按如下方式执行此操作:
public class ApplicationUser : IdentityUser
{
public string Address { get; set; }
public string Gender { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
使用ApplicationUser的数据库上下文:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
public DbSet<ApplicationUser> ApplicationUsers { get; set; }
}
如何更改ExiresIn属性的值?缺省值为
3600人.
为此,您需要修改您的SecurityTokenDescriptor类,它具有属性Expires,您可以在这里以日期时间格式设置您想要的值.您可以看到以下内容:
让我们来看看,你能做到吗?
当您对用户进行身份验证时,您的责任是重定向到正确页面中的用户或生成令牌.因此,当您要生成令牌时,只需执行以下操作:
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(claims),
Expires = DateTime.UtcNow.AddHours(2) // Set the time you need
};
var tokenHandler = new JwtSecurityTokenHandler();
var securityToken = tokenHandler.CreateToken(tokenDescriptor);
var token = tokenHandler.WriteToken(securityToken);
Note:如果您仍有任何困惑,请参阅我们的官方文件tokenDescriptor modifiation和cusomize IdentityModel