Browse Source

Created account controller.

pull/7950/head
Alper Ebicoglu 8 years ago
parent
commit
56798a74dc
  1. 85
      modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/AccountController.cs
  2. 1
      modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LogoutController.cs
  3. 2
      modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/Models/AbpLoginResult.cs
  4. 5
      modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/Models/UserLoginInfo.cs

85
modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LoginController.cs → modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/AccountController.cs

@ -1,12 +1,12 @@
using System; using System;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Localization;
using Volo.Abp.Account.Web.Areas.Account.Controllers.Models; using Volo.Abp.Account.Web.Areas.Account.Controllers.Models;
using Volo.Abp.Account.Web.Localization;
using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Identity; using Volo.Abp.Identity;
using SignInResult = Microsoft.AspNetCore.Identity.SignInResult;
using UserLoginInfo = Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo; using UserLoginInfo = Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo;
namespace Volo.Abp.Account.Web.Areas.Account.Controllers namespace Volo.Abp.Account.Web.Areas.Account.Controllers
@ -15,44 +15,53 @@ namespace Volo.Abp.Account.Web.Areas.Account.Controllers
[Controller] [Controller]
[ControllerName("Login")] [ControllerName("Login")]
[Area("Account")] [Area("Account")]
[Route("api/account/login")] [Route("api/account")]
public class LoginController : AbpController public class AccountController : AbpController
{ {
private readonly SignInManager<IdentityUser> _signInManager; private readonly SignInManager<IdentityUser> _signInManager;
public IStringLocalizer<AccountResource> L { get; set; } private readonly IdentityUserManager _userManager;
public string AspNetCoreIdentityCookieName = ".AspNetCore." + IdentityConstants.ApplicationScheme;
public LoginController(SignInManager<IdentityUser> signInManager) public AccountController(SignInManager<IdentityUser> signInManager, IdentityUserManager userManager)
{ {
_signInManager = signInManager; _signInManager = signInManager;
_userManager = userManager;
} }
[HttpPost] [HttpPost]
[Route("")] [Route("login")]
public virtual async Task<AbpLoginResult> Login(UserLoginInfo login) public virtual async Task<AbpLoginResult> Login(UserLoginInfo login)
{ {
if (login == null) ValidateLoginInfo(login);
{
throw new ArgumentException(nameof(login));
}
if (login.UserNameOrEmailAddress.IsNullOrEmpty()) return GetAbpLoginResult(await _signInManager.PasswordSignInAsync(
login.UserNameOrEmailAddress,
login.Password,
login.RememberMe,
true
));
}
[HttpPost]
[Route("checkPassword")]
public virtual async Task<AbpLoginResult> CheckPassword(UserLoginInfo login)
{
ValidateLoginInfo(login);
try
{ {
throw new ArgumentNullException(nameof(login.UserNameOrEmailAddress)); IdentityUser identityUser = await _userManager.FindByNameAsync(login.UserNameOrEmailAddress);
return GetAbpLoginResult(await _signInManager.CheckPasswordSignInAsync(identityUser, login.Password, true));
} }
catch (Exception e)
if (login.Password.IsNullOrEmpty())
{ {
throw new ArgumentNullException(nameof(login.Password)); Console.WriteLine(e);
throw;
} }
var result = await _signInManager.PasswordSignInAsync( }
login.UserNameOrEmailAddress,
login.Password,
login.RememberMe,
true
);
private static AbpLoginResult GetAbpLoginResult(SignInResult result)
{
if (result.IsLockedOut) if (result.IsLockedOut)
{ {
return new AbpLoginResult(LoginResultType.LockedOut); return new AbpLoginResult(LoginResultType.LockedOut);
@ -73,31 +82,25 @@ namespace Volo.Abp.Account.Web.Areas.Account.Controllers
return new AbpLoginResult(LoginResultType.InvalidUserNameOrPassword); return new AbpLoginResult(LoginResultType.InvalidUserNameOrPassword);
} }
return new AbpLoginResult(LoginResultType.Success) return new AbpLoginResult(LoginResultType.Success);
{
IdentityCookieToken = GetCookieValueFromResponse(AspNetCoreIdentityCookieName)
};
} }
private string GetCookieValueFromResponse(string cookieName) private void ValidateLoginInfo(UserLoginInfo login)
{ {
foreach (var headers in Response.Headers.Values) if (login == null)
{ {
foreach (var header in headers) throw new ArgumentException(nameof(login));
{ }
if (!header.StartsWith($"{cookieName}="))
{
continue;
}
var p1 = header.IndexOf('='); if (login.UserNameOrEmailAddress.IsNullOrEmpty())
var p2 = header.IndexOf(';'); {
return header.Substring(p1 + 1, p2 - p1 - 1); throw new ArgumentNullException(nameof(login.UserNameOrEmailAddress));
}
} }
return null; if (login.Password.IsNullOrEmpty())
{
throw new ArgumentNullException(nameof(login.Password));
}
} }
} }
} }

1
modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LogoutController.cs

@ -16,6 +16,7 @@ namespace Volo.Abp.Account.Web.Areas.Account.Controllers
_signInManager = signInManager; _signInManager = signInManager;
} }
//todo@alper: this method can be moved to AccountController like "account/logout"
public async Task<IActionResult> Index() public async Task<IActionResult> Index()
{ {
await _signInManager.SignOutAsync(); await _signInManager.SignOutAsync();

2
modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/Models/AbpLoginResult.cs

@ -7,8 +7,6 @@
Result = result; Result = result;
} }
public string IdentityCookieToken { get; set; }
public LoginResultType Result { get; } public LoginResultType Result { get; }
public string Description => Result.ToString(); public string Description => Result.ToString();

5
modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/Models/UserLoginInfo.cs

@ -1,4 +1,5 @@
using System.ComponentModel.DataAnnotations; using System;
using System.ComponentModel.DataAnnotations;
namespace Volo.Abp.Account.Web.Areas.Account.Controllers.Models namespace Volo.Abp.Account.Web.Areas.Account.Controllers.Models
{ {
@ -14,5 +15,7 @@ namespace Volo.Abp.Account.Web.Areas.Account.Controllers.Models
public string Password { get; set; } public string Password { get; set; }
public bool RememberMe { get; set; } public bool RememberMe { get; set; }
public Guid? TenanId { get; set; }
} }
} }
Loading…
Cancel
Save