[Route("api/[controller]/[action]")]
[ApiController]
public class WeChatController : ControllerBase
{
private readonly RepositoryWeChatThepublic _repositoryWeChat;
private readonly TokenAuthController _token;
private readonly UserAppService _userApp;
private readonly UserManager _userManager;
private readonly RoleManager _roleManager;
public WeChatController(RepositoryWeChatThepublic repositoryWeChat, TokenAuthController token, UserAppService userApp, UserManager userManager,
RoleManager roleManager )
{
this._repositoryWeChat = repositoryWeChat;
this._token = token;
this._userApp = userApp;
_userManager = userManager;
_roleManager = roleManager;
}
[HttpPost]
public async Task<AuthenticateResultModel> IdCardLoginAsync(AuthenticateModel model)
{
try
{
if (string.IsNullOrEmpty(model.UserNameOrEmailAddress)||string.IsNullOrEmpty(model.Password)|| model.UserNameOrEmailAddress=="null"|| model.Password=="null")
{
throw new UserFriendlyException("账号或密码不能为空!");
}
if ((!Regex.IsMatch(model.UserNameOrEmailAddress, @"^(^\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$", RegexOptions.IgnoreCase)))
{
throw new UserFriendlyException("请输入正确的身份证号码!");
}
bool Exist = _repositoryWeChat.GetUserExist(model.UserNameOrEmailAddress);
if (Exist)
{
return await _token.Authenticate(model);
}
else
{
CreateUserDto userDto = new CreateUserDto
{
UserName = model.UserNameOrEmailAddress,
账号 = model.UserNameOrEmailAddress,
Name = model.UserNameOrEmailAddress,
姓名 = model.UserNameOrEmailAddress,
Surname = model.UserNameOrEmailAddress,
EmailAddress =model.UserNameOrEmailAddress+"@1.com",
PhoneNumber = model.UserNameOrEmailAddress,
IsActive =true,
RoleNames =new string[] { "受检人" },
Password =model.Password,
电话 = model.UserNameOrEmailAddress,
序号 =model.序号,
组织机构名称 ="",
组织机构编号 =model.卫生院机构编号,
乡镇街道 ="",
卫生院名称 =""
};
UserDto dto= await CreateUserAsync(userDto);
if (!string.IsNullOrEmpty(dto.UserName))
{
return await _token.Authenticate(model);
}
else
{
throw new UserFriendlyException("账号不存在,为此人创建账号时失败");
}
}
}
catch (Exception e)
{
throw new UserFriendlyException(e.Message);
}
}
private async Task<UserDto> CreateUserAsync(CreateUserDto userDto)
{
var user = ObjectMapper.Map<User>(userDto);
user.TenantId = 1;
await _userManager.InitializeOptionsAsync(1);
CheckErrors(await _userManager.CreateAsync(user, userDto.Password));
if (userDto.RoleNames != null)
{
CheckErrors(await _userManager.SetRolesAsync(user, userDto.RoleNames));
}
return MapToEntityDto(user);
}
protected UserDto MapToEntityDto(User user)
{
var roleIds = user.Roles.Select(x => x.RoleId).ToArray();
var roles = _roleManager.Roles.Where(r => roleIds.Contains(r.Id)).Select(r => r.NormalizedName);
UserDto userDto = new UserDto {
UserName=user.UserName,
序号=user.序号
};
userDto.RoleNames = roles.ToArray();
return userDto;
}
}
需要调用框架的这个登录接口
public async Task<AuthenticateResultModel> Authenticate([FromBody] AuthenticateModel model)
{
var loginResult = await GetLoginResultAsync(
model.UserNameOrEmailAddress,
model.Password,
GetTenancyNameOrNull()
);
var accessToken = CreateAccessToken(CreateJwtClaims(loginResult.Identity));
return new AuthenticateResultModel
{
AccessToken = accessToken,
EncryptedAccessToken = GetEncryptedAccessToken(accessToken),
ExpireInSeconds = int.MaxValue ,//(int)_configuration.Expiration.TotalSeconds,
UserId = loginResult.User.Id
};
}