Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class AccountController : BaseApiController
public async Task<IActionResult> Login([FromForm] string account, [FromForm] string password, [FromForm] string tenant = null, [FromForm] bool rememberLogin = false)
{

var user = Wtm.DoLogin(account, password, tenant);
var user = await Wtm.DoLoginAsync(account, password, tenant);
if (user == null)
{
return BadRequest(Localizer["Sys.LoginFailed"].Value);
Expand Down Expand Up @@ -62,7 +62,7 @@ public async Task<IActionResult> Login([FromForm] string account, [FromForm] str
[HttpPost("LoginJwt")]
public async Task<IActionResult> LoginJwt(SimpleLogin loginInfo)
{
var user = Wtm.DoLogin(loginInfo.Account, loginInfo.Password, loginInfo.Tenant);
var user = await Wtm.DoLoginAsync(loginInfo.Account, loginInfo.Password, loginInfo.Tenant);
if (user == null)
{
ModelState.AddModelError(" ", Localizer["Sys.LoginFailed"]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class AccountController : BaseApiController
public async Task<IActionResult> Login([FromForm] string account, [FromForm] string password, [FromForm] string tenant = null, [FromForm] bool rememberLogin = false)
{

var user = Wtm.DoLogin(account, password, tenant);
var user = await Wtm.DoLoginAsync(account, password, tenant);
if (user == null)
{
return BadRequest(Localizer["Sys.LoginFailed"].Value);
Expand Down Expand Up @@ -62,7 +62,7 @@ public async Task<IActionResult> Login([FromForm] string account, [FromForm] str
[HttpPost("LoginJwt")]
public async Task<IActionResult> LoginJwt(SimpleLogin loginInfo)
{
var user = Wtm.DoLogin(loginInfo.Account, loginInfo.Password, loginInfo.Tenant);
var user = await Wtm.DoLoginAsync(loginInfo.Account, loginInfo.Password, loginInfo.Tenant);
if (user == null)
{
ModelState.AddModelError(" ", Localizer["Sys.LoginFailed"]);
Expand Down
2 changes: 1 addition & 1 deletion demo/WalkingTec.Mvvm.Demo/Controllers/LoginController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public async Task<ActionResult> Login(LoginVM vm)
return View(vm);
}
}
var user = Wtm.DoLogin(vm.ITCode, vm.Password, vm.Tenant);
var user = await Wtm.DoLoginAsync(vm.ITCode, vm.Password, vm.Tenant);
if (user == null)
{
vm.MSD.AddModelError("", Localizer["Sys.LoginFailed"]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class AccountController : BaseApiController
public async Task<IActionResult> Login([FromForm] string account, [FromForm] string password, [FromForm] string tenant = null, [FromForm] bool rememberLogin = false)
{

var user = Wtm.DoLogin(account, password, tenant);
var user = await Wtm.DoLoginAsync(account, password, tenant);
if (user == null)
{
return BadRequest(Localizer["Sys.LoginFailed"].Value);
Expand Down Expand Up @@ -62,7 +62,7 @@ public async Task<IActionResult> Login([FromForm] string account, [FromForm] str
[HttpPost("LoginJwt")]
public async Task<IActionResult> LoginJwt(SimpleLogin loginInfo)
{
var user = Wtm.DoLogin(loginInfo.Account, loginInfo.Password, loginInfo.Tenant);
var user = await Wtm.DoLoginAsync(loginInfo.Account, loginInfo.Password, loginInfo.Tenant);
if (user == null)
{
ModelState.AddModelError(" ", Localizer["Sys.LoginFailed"]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class AccountController : BaseApiController
public async Task<IActionResult> Login([FromForm] string account, [FromForm] string password, [FromForm] string tenant = null, [FromForm] bool rememberLogin = false)
{

var user = Wtm.DoLogin(account, password, tenant);
var user = await Wtm.DoLoginAsync(account, password, tenant);
if (user == null)
{
return BadRequest(Localizer["Sys.LoginFailed"].Value);
Expand Down Expand Up @@ -62,7 +62,7 @@ public async Task<IActionResult> Login([FromForm] string account, [FromForm] str
[HttpPost("LoginJwt")]
public async Task<IActionResult> LoginJwt(SimpleLogin loginInfo)
{
var user = Wtm.DoLogin(loginInfo.Account, loginInfo.Password, loginInfo.Tenant);
var user = await Wtm.DoLoginAsync(loginInfo.Account, loginInfo.Password, loginInfo.Tenant);
if (user == null)
{
ModelState.AddModelError(" ", Localizer["Sys.LoginFailed"]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class AccountController : BaseApiController
public async Task<IActionResult> Login([FromForm] string account, [FromForm] string password, [FromForm] string tenant = null, [FromForm] bool rememberLogin = false)
{

var user = Wtm.DoLogin(account, password, tenant);
var user = await Wtm.DoLoginAsync(account, password, tenant);
if (user == null)
{
return BadRequest(Localizer["Sys.LoginFailed"].Value);
Expand Down Expand Up @@ -62,7 +62,7 @@ public async Task<IActionResult> Login([FromForm] string account, [FromForm] str
[HttpPost("LoginJwt")]
public async Task<IActionResult> LoginJwt(SimpleLogin loginInfo)
{
var user = Wtm.DoLogin(loginInfo.Account, loginInfo.Password, loginInfo.Tenant);
var user = await Wtm.DoLoginAsync(loginInfo.Account, loginInfo.Password, loginInfo.Tenant);
if (user == null)
{
ModelState.AddModelError(" ", Localizer["Sys.LoginFailed"]);
Expand Down
48 changes: 17 additions & 31 deletions src/WalkingTec.Mvvm.Core/WTMContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ public virtual LoginUserInfo
{
return null;
}
var user = DoLogin(itcode, null, null);
var user = DoLoginAsync(itcode, null, null).GetAwaiter().GetResult();
return user;
}

Expand Down Expand Up @@ -365,11 +365,11 @@ public void SetServiceProvider(IServiceProvider sp)
this._serviceProvider = sp;
}

public LoginUserInfo DoLogin(string username, string password, string tenant)
public async Task<LoginUserInfo> DoLoginAsync(string username, string password, string tenant)
{
if(string.IsNullOrEmpty(tenant))
{
tenant = DC.TenantCode;
tenant = DC.TenantCode;
}
if (tenant == null && HttpContext.User.Identity.IsAuthenticated)
{
Expand All @@ -382,12 +382,12 @@ public LoginUserInfo DoLogin(string username, string password, string tenant)
{
remoteToken = HttpContext.User.Claims.Where(x => x.Type == AuthConstants.JwtClaimTypes.RToken).Select(x => x.Value).FirstOrDefault();
}
LoginUserInfo rv = null;
LoginUserInfo rv = null;
if (string.IsNullOrEmpty(remoteToken) == false)
{
Dictionary<string, string> headers = new Dictionary<string, string>();
headers.Add("Authorization", "Bearer " + remoteToken);
var user = CallAPI<LoginUserInfo>("mainhost", "/api/_account/checkuserinfo?IsApi=false", HttpMethodEnum.GET, new { }, 10, headers: headers).Result;
var user = await CallAPI<LoginUserInfo>("mainhost", "/api/_account/checkuserinfo?IsApi=false", HttpMethodEnum.GET, new { }, 10, headers: headers);
rv = user.Data;
if (rv != null)
{
Expand All @@ -396,13 +396,13 @@ public LoginUserInfo DoLogin(string username, string password, string tenant)
}
else if(string.IsNullOrEmpty(password)==false)
{
var loginjwt = CallAPI<Token>("mainhost", "/api/_account/loginjwt", HttpMethodEnum.POST, new { Account = username, Password = password }, 10).Result;
var loginjwt = await CallAPI<Token>("mainhost", "/api/_account/loginjwt", HttpMethodEnum.POST, new { Account = username, Password = password }, 10);
if (string.IsNullOrEmpty(loginjwt?.Data?.AccessToken) == false)
{
remoteToken = loginjwt?.Data?.AccessToken;
Dictionary<string, string> headers = new Dictionary<string, string>();
headers.Add("Authorization", "Bearer " + remoteToken);
var user = CallAPI<LoginUserInfo>("mainhost", "/api/_account/checkuserinfo?IsApi=false", HttpMethodEnum.GET, new { }, 10, headers: headers).Result;
var user = await CallAPI<LoginUserInfo>("mainhost", "/api/_account/checkuserinfo?IsApi=false", HttpMethodEnum.GET, new { }, 10, headers: headers);
rv = user.Data;
if (rv != null)
{
Expand All @@ -412,16 +412,7 @@ public LoginUserInfo DoLogin(string username, string password, string tenant)
}
if (rv != null)
{
//var cacheKey = $"{GlobalConstants.CacheKey.UserInfo}:{rv.ITCode + "$`$" + rv.TenantCode}";
//var cacheuser = Cache.Get<LoginUserInfo>(cacheKey);
//if (cacheuser != null && cacheuser.TimeTick >= rv.TimeTick)
//{
// rv = cacheuser;
//}
//else
//{
rv.LoadBasicInfoAsync(this).Wait();
//}
await rv.LoadBasicInfoAsync(this);
}
return rv;
}
Expand All @@ -430,7 +421,6 @@ public LoginUserInfo DoLogin(string username, string password, string tenant)
bool exist = false;
username = HttpContext.User.Claims.Where(x => x.Type == AuthConstants.JwtClaimTypes.Subject).Select(x => x.Value).FirstOrDefault() ?? username;
var ct = GlobaInfo.AllTenant.Where(x => x.TCode == tenant).FirstOrDefault();
//如果找不到指定的tenant,说明租户不存在,直接返回null
if(ct == null && string.IsNullOrEmpty(tenant) == false)
{
return null;
Expand Down Expand Up @@ -462,7 +452,6 @@ public LoginUserInfo DoLogin(string username, string password, string tenant)
else
{
exist = true;
// Auto-upgrade: if old MD5 hash, rehash on successful login
if (verifyResult == PasswordVerifyResult.SuccessRehashNeeded)
{
var fullUser = BaseUserQuery.IgnoreQueryFilters()
Expand All @@ -471,7 +460,7 @@ public LoginUserInfo DoLogin(string username, string password, string tenant)
if (fullUser != null)
{
fullUser.Password = PasswordHashHelper.HashPassword(password);
DC.SaveChanges();
await DC.SaveChangesAsync();
}
}
}
Expand All @@ -487,24 +476,21 @@ public LoginUserInfo DoLogin(string username, string password, string tenant)
ITCode = username,
TenantCode = tenant
};
//var cacheKey = $"{GlobalConstants.CacheKey.UserInfo}:{username + "$`$" + tenant}";
//var cacheuser = Cache.Get<LoginUserInfo>(cacheKey);
//if (cacheuser != null)
//{
// user = cacheuser;
//}
//else
//{
user.LoadBasicInfoAsync(this).Wait();
//}
await user.LoadBasicInfoAsync(this);
user.RemoteToken = null;
var authService = HttpContext.RequestServices.GetService(typeof(ITokenService)) as ITokenService;
var token = authService.IssueTokenAsync(user).Result;
var token = await authService.IssueTokenAsync(user);
user.RemoteToken = token.AccessToken;
return user;
}
}

[Obsolete("Use DoLoginAsync to avoid ThreadPool starvation. DoLogin blocks threads on every auth request.")]
public LoginUserInfo DoLogin(string username, string password, string tenant)
{
return DoLoginAsync(username, password, tenant).GetAwaiter().GetResult();
}

public Token RefreshToken()
{
if(LoginUserInfo == null)
Expand Down
Loading