2015-08-09 5 views
1

Я использую платформу 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]?

ответ

1

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

+0

Я сделал это из шаблона ABP и добавил пакеты с нулевым модулем, используя nuget. Я уже давно сравниваю их и до сих пор не могу найти проблему. Могу ли я считать, что «AuthenticationManager.SignIn (новый AuthenticationProperties { IsPersistent = loginModel.RememberMe}, loginResult.Identity);" полностью заботится обо всех необходимых функциях входа в систему? – Sam

+0

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

+0

Я начал с чистого шаблона с включенным нулевым модулем, и он сработал. Спасибо за вашу помощь! – Sam

Смежные вопросы