ASP.NET 样板 - 授权无效
ASP.NET Boilerplate - Authorization not working
我正在使用 ASP.NET 样板框架创建具有授权的应用程序,但无法使其正常工作。
ajax 方法正在调用 Login 方法并检索正确的数据,执行成功功能并确认:"Logged in!"。 (只有登录信息正确,否则报错)
我预计 'AuthenticationManager.SignIn' 会处理所有登录功能(似乎是零模块中的情况)。但是在登录并转到应用了 [AbpMvcAuthorize] 的控制器后,我最终出现在一个页面上,通知我我没有打开该页面的权限。
Javascript:
(function () {
$('#LoginButton').click(function (e) {
e.preventDefault();
abp.ui.setBusy(
$('#LoginArea'),
abp.ajax({
url: abp.appPath + 'Account/Login',
type: 'POST',
data: JSON.stringify({
usernameOrEmailAddress: $('#EmailAddressInput').val(),
password: $('#PasswordInput').val(),
rememberMe: $('#RememberMeInput').is(':checked')
}),
success: function (data) {
if (data != null) {
confirm(data);
}
},
error: function () {
confirm("Something went wrong. Try again later!");
}
})
);
});
})();
账户控制器:
[HttpPost]
public async Task<JsonResult> Login(LoginViewModel loginModel, string returnUrl = "")
{
try
{
if (!ModelState.IsValid)
{
throw new UserFriendlyException("Your form is invalid!");
}
var loginResult = await _userManager.LoginAsync(
loginModel.UsernameOrEmailAddress,
loginModel.Password,
loginModel.TenancyName
);
switch (loginResult.Result)
{
case AbpLoginResultType.Success:
break;
case AbpLoginResultType.InvalidUserNameOrEmailAddress:
...
}
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
AuthenticationManager.SignIn(new AuthenticationProperties {
IsPersistent = loginModel.RememberMe }, loginResult.Identity);
if (string.IsNullOrWhiteSpace(returnUrl))
{
returnUrl = Request.ApplicationPath;
}
}
catch (UserFriendlyException ex)
{
return Json(ex.Message);
}
return Json("Logged in!");
}
编辑:在AuthenticationManager.Sign(..)之后,我可以通过loginResult.User看到登录的用户信息。所以我想登录有效,但 [AbpMvcAuthorize] 有问题?
很奇怪。您是如何创建解决方案的?来自模板 (http://www.aspnetboilerplate.com/Templates)?
因为,它在模板中正常工作(参见模板的HomeController:https://github.com/aspnetboilerplate/module-zero-template/blob/master/src/AbpCompanyName.AbpProjectName.WebSpaAngular/Controllers/HomeController.cs)
那么,你能和它比一比吗?
我正在使用 ASP.NET 样板框架创建具有授权的应用程序,但无法使其正常工作。
ajax 方法正在调用 Login 方法并检索正确的数据,执行成功功能并确认:"Logged in!"。 (只有登录信息正确,否则报错)
我预计 'AuthenticationManager.SignIn' 会处理所有登录功能(似乎是零模块中的情况)。但是在登录并转到应用了 [AbpMvcAuthorize] 的控制器后,我最终出现在一个页面上,通知我我没有打开该页面的权限。
Javascript:
(function () {
$('#LoginButton').click(function (e) {
e.preventDefault();
abp.ui.setBusy(
$('#LoginArea'),
abp.ajax({
url: abp.appPath + 'Account/Login',
type: 'POST',
data: JSON.stringify({
usernameOrEmailAddress: $('#EmailAddressInput').val(),
password: $('#PasswordInput').val(),
rememberMe: $('#RememberMeInput').is(':checked')
}),
success: function (data) {
if (data != null) {
confirm(data);
}
},
error: function () {
confirm("Something went wrong. Try again later!");
}
})
);
});
})();
账户控制器:
[HttpPost]
public async Task<JsonResult> Login(LoginViewModel loginModel, string returnUrl = "")
{
try
{
if (!ModelState.IsValid)
{
throw new UserFriendlyException("Your form is invalid!");
}
var loginResult = await _userManager.LoginAsync(
loginModel.UsernameOrEmailAddress,
loginModel.Password,
loginModel.TenancyName
);
switch (loginResult.Result)
{
case AbpLoginResultType.Success:
break;
case AbpLoginResultType.InvalidUserNameOrEmailAddress:
...
}
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
AuthenticationManager.SignIn(new AuthenticationProperties {
IsPersistent = loginModel.RememberMe }, loginResult.Identity);
if (string.IsNullOrWhiteSpace(returnUrl))
{
returnUrl = Request.ApplicationPath;
}
}
catch (UserFriendlyException ex)
{
return Json(ex.Message);
}
return Json("Logged in!");
}
编辑:在AuthenticationManager.Sign(..)之后,我可以通过loginResult.User看到登录的用户信息。所以我想登录有效,但 [AbpMvcAuthorize] 有问题?
很奇怪。您是如何创建解决方案的?来自模板 (http://www.aspnetboilerplate.com/Templates)? 因为,它在模板中正常工作(参见模板的HomeController:https://github.com/aspnetboilerplate/module-zero-template/blob/master/src/AbpCompanyName.AbpProjectName.WebSpaAngular/Controllers/HomeController.cs) 那么,你能和它比一比吗?