Я использую платформу ASP.NET Boilerplate для создания приложения с авторизацией, но у меня проблемы с его работой.ASP.NET Boilerplate - Авторизация не работает
Метод ajax вызывает метод Login и возвращает правильные данные, выполняющие функцию успеха, и подтверждает: «Записан!». (Только когда информация о входе в систему верна, она дает ошибку).
Я ожидал, что «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!");
}
})
);
});
})();
AccountController:
[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!");
}
Edit: После AuthenticationManager.Sign (..), я могу видеть, вошедшего в пользовательской информации по loginResult.User. Итак, я думаю, что вход в систему работает, но что-то не так с [AbpMvcAuthorize]?
Я сделал это из шаблона ABP и добавил пакеты с нулевым модулем, используя nuget. Я уже давно сравниваю их и до сих пор не могу найти проблему. Могу ли я считать, что «AuthenticationManager.SignIn (новый AuthenticationProperties { IsPersistent = loginModel.RememberMe}, loginResult.Identity);" полностью заботится обо всех необходимых функциях входа в систему? – Sam
После AuthenticationManager.Sign (..), я могу видеть зарегистрированную информацию пользователя по имени loginResult.User. Итак, я думаю, что вход в систему работает, но что-то не так с [AbpMvcAuthorize]? – Sam
Я начал с чистого шаблона с включенным нулевым модулем, и он сработал. Спасибо за вашу помощь! – Sam