我正在尝试在.NET core 2.1中向我的API添加身份验证和授权。一切都很顺利。但是,当我尝试登录用户时,我在测试环境中收到此错误:"读取属性'IdentityUser.Id'的数据库值时发生异常。预期类型为"System.String",但实际值的类型为"System.Guid"。
我尝试将 id 的数据类型覆盖为字符串,但没有任何效果。我也尝试放下表格并重新创建,但没有一个奏效。
应用程序用户模型:
public class ApplicationUser : IdentityUser
{
public override string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
这是我登录用户的方式:
public async Task<object> Login ([FromBody] LoginModel model)
{
try
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
//use signin manager to handle user sign in
//the error shows up in this method
var signin = await _signInManager.PasswordSignInAsync(model.Email, model.Password, false, false);
if (signin.Succeeded)
{
var appuser = _userManager.Users.SingleOrDefault(u => u.Email == model.Email);
return await GenerateJwtToken(model.Email, appuser);
}
}
catch(Exception ex)
{
return ex.Message;
}
throw new ApplicationException("INVALID LOGIN ATTEMPT");
// return BadRequest("no login detail found");
}
这是我的登录模型
public class LoginModel
{
[Required]
public string Email { get; set; }
[Required]
public string Password { get; set; }
}
我知道默认的 identityuser.id 类型是 guid,我希望能够将其转换/覆盖为字符串,以便它符合我的要求
更改应用程序模型类以使用通用 IdentityUser 类型,如下所示:
public class ApplicationUser : IdentityUser<string>
{
public override string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}