ASP.NET Boilerplate - авторизация не работает

Я использую платформу ASP.NET Boilerplate для создания приложения с авторизацией, но не могу заставить его работать.

Метод ajax вызывает метод Login и извлекает правильные данные, выполняя функцию успеха и подтверждая: «Logged in!». (Только когда информация для входа верна, els выдает ошибку).

Я ожидал, что 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!");
}

Изменить: после AuthenticationManager.Sign (..) я могу увидеть информацию о зарегистрированном пользователе с помощью loginResult.User. Полагаю, логин работает, но что-то не так с [AbpMvcAuthorize]?


person Sam    schedule 09.08.2015    source источник


Ответы (1)


Это очень странно. Как вы создали свое решение? Из шаблона (http://www.aspnetboilerplate.com/Templates)? Потому что он нормально работает в шаблоне (см. HomeController шаблона: https://github.com/aspnetboilerplate/module-zero-template/blob/master/src/AbpCompanyName.AbpProjectName.WebSpaAngular/Controllers/HomeController.cs) Итак, можно с этим сравнить?

person hikalkan    schedule 12.08.2015
comment
Я сделал это из шаблона ABP, а затем добавил пакеты нулевого модуля с помощью nuget. Я давно сравниваю оба и до сих пор не могу найти проблему. Могу ли я предположить, что AuthenticationManager.SignIn (новый AuthenticationProperties {IsPersistent = loginModel.RememberMe}, loginResult.Identity); полностью позаботится обо всех необходимых функциях входа в систему? - person Sam; 13.08.2015
comment
После AuthenticationManager.Sign (..) я могу увидеть информацию о вошедшем в систему пользователе с помощью loginResult.User. Полагаю, логин работает, но что-то не так с [AbpMvcAuthorize]? - person Sam; 13.08.2015
comment
Я начал с чистого шаблона с включенным нулевым модулем, и он сработал. Спасибо за вашу помощь! - person Sam; 14.08.2015