1、首先去官网下载.NET CORE 版本的,让后我们运行程序
项目结构如上
首先我们分析登录功能
ABP请求的登录地址,使用token方式登录
http://localhost:21021/api/TokenAuth/Authenticate
这个控制器在 这个项目下面,是可以直接访问的
/// <summary> /// 根据用户名或者邮箱登录 /// </summary> /// <param name="usernameOrEmailAddress"></param> /// <param name="password"></param> /// <param name="tenancyName"></param> /// <returns></returns> private async Task<AbpLoginResult<Tenant, User>> GetLoginResultAsync(string usernameOrEmailAddress, string password, string tenancyName) { ///登录,使用identity4登录验证,返回ABPLoginResult对象 var loginResult = await _logInManager.LoginAsync(usernameOrEmailAddress, password, tenancyName); //返回结果是identityresult,需要判断结果 switch (loginResult.Result) { case AbpLoginResultType.Success: return loginResult; default: throw _abpLoginResultTypeHelper.CreateExceptionForFailedLoginAttempt(loginResult.Result, usernameOrEmailAddress, tenancyName); } }
The struture Of ABPLoingResult
public class AbpLoginResult<TTenant, TUser> where TTenant : AbpTenant<TUser> where TUser : AbpUserBase { public AbpLoginResultType Result { get; private set; } public TTenant Tenant { get; private set; } public TUser User { get; private set; } public ClaimsIdentity Identity { get; private set; } public AbpLoginResult(AbpLoginResultType result, TTenant tenant = null, TUser user = null) { Result = result; Tenant = tenant; User = user; } public AbpLoginResult(TTenant tenant, TUser user, ClaimsIdentity identity) : this(AbpLoginResultType.Success, tenant) { User = user; Identity = identity; } }
Register user use xxx. web.core Project and use registration Mothod in AccountController ,the fllowing code :
[HttpPost] [UnitOfWork] public async Task<ActionResult> Register(RegisterViewModel model) { try { ExternalLoginInfo externalLoginInfo = null; //out user if (model.IsExternalLogin) { externalLoginInfo = await _signInManager.GetExternalLoginInfoAsync(); if (externalLoginInfo == null) { throw new Exception("Can not external login!"); } model.UserName = model.EmailAddress; model.Password = Authorization.Users.User.CreateRandomPassword(); } else { if (model.UserName.IsNullOrEmpty() || model.Password.IsNullOrEmpty()) { throw new UserFriendlyException(L("FormIsNotValidMessage")); } } var user = await _userRegistrationManager.RegisterAsync( model.Name, model.Surname, model.EmailAddress, model.UserName, model.Password, true // Assumed email address is always confirmed. Change this if you want to implement email confirmation. ); // Getting tenant-specific settings var isEmailConfirmationRequiredForLogin = await SettingManager.GetSettingValueAsync<bool>(AbpZeroSettingNames.UserManagement.IsEmailConfirmationRequiredForLogin); if (model.IsExternalLogin) { Debug.Assert(externalLoginInfo != null); if (string.Equals(externalLoginInfo.Principal.FindFirstValue(ClaimTypes.Email), model.EmailAddress, StringComparison.OrdinalIgnoreCase)) { user.IsEmailConfirmed = true; } user.Logins = new List<UserLogin> { new UserLogin { LoginProvider = externalLoginInfo.LoginProvider, ProviderKey = externalLoginInfo.ProviderKey, TenantId = user.TenantId } }; } await _unitOfWorkManager.Current.SaveChangesAsync(); Debug.Assert(user.TenantId != null); var tenant = await _tenantManager.GetByIdAsync(user.TenantId.Value); // Directly login if possible if (user.IsActive && (user.IsEmailConfirmed || !isEmailConfirmationRequiredForLogin)) { AbpLoginResult<Tenant, User> loginResult; if (externalLoginInfo != null) { loginResult = await _logInManager.LoginAsync(externalLoginInfo, tenant.TenancyName); } else { loginResult = await GetLoginResultAsync(user.UserName, model.Password, tenant.TenancyName); } if (loginResult.Result == AbpLoginResultType.Success) { await _signInManager.SignInAsync(loginResult.Identity, false); return Redirect(GetAppHomeUrl()); } Logger.Warn("New registered user could not be login. This should not be normally. login result: " + loginResult.Result); } return View("RegisterResult", new RegisterResultViewModel { TenancyName = tenant.TenancyName, NameAndSurname = user.Name + " " + user.Surname, UserName = user.UserName, EmailAddress = user.EmailAddress, IsEmailConfirmed = user.IsEmailConfirmed, IsActive = user.IsActive, IsEmailConfirmationRequiredForLogin = isEmailConfirmationRequiredForLogin }); } catch (UserFriendlyException ex) { ViewBag.ErrorMessage = ex.Message; return View("Register", model); } }