как подключиться и использовать встроенную идентификацию со страницы входа Angular? - PullRequest
0 голосов
/ 15 апреля 2020

Я установил тему в основной проект asp. net и установил идентификационные данные для ускорения разработки, что дает мне контроллер входа в систему с именем Login.cshtml.cs. Вы можете увидеть код ниже.

Теперь я хочу использовать функцию в Login.cshtml.cs и войти в систему. Есть какой-либо способ сделать это? поскольку login.cshtml.cs не имеет конечной точки API, я думаю, что трудно достичь этого.

Angular скрипт входа в систему

submit() {
        const controls = this.loginForm.controls;
        /** check form */
        if (this.loginForm.invalid) {
            Object.keys(controls).forEach(controlName =>
                controls[controlName].markAsTouched()
            );
            return;
        }

        this.loading = true;

        const authData = {
            username: controls.username.value,
            password: controls.password.value
        };


    }

Идентификационный файл входа в систему

using System;
using System.Collections.Generic;

namespace Areas.Identity.Pages.Account
{
    [AllowAnonymous]
    public class LoginModel : PageModel
    {
        private readonly UserManager<IdentityUser> _userManager;
        private readonly SignInManager<IdentityUser> _signInManager;
        private readonly ILogger<LoginModel> _logger;

        public LoginModel(SignInManager<IdentityUser> signInManager, 
            ILogger<LoginModel> logger,
            UserManager<IdentityUser> userManager)
        {
            _userManager = userManager;
            _signInManager = signInManager;
            _logger = logger;
        }


        public string ReturnUrl { get; set; }



        public async Task<IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");

            if (ModelState.IsValid)
            {
                // This doesn't count login failures towards account lockout
                // To enable password failures to trigger account lockout, set lockoutOnFailure: true
                var result = await _signInManager.PasswordSignInAsync(Input.UserName, Input.Password, Input.RememberMe, lockoutOnFailure: false);
                if (result.Succeeded)
                {
                    _logger.LogInformation("User logged in.");
                    return LocalRedirect(returnUrl);
                }
                if (result.RequiresTwoFactor)
                {
                    return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe });
                }
                if (result.IsLockedOut)
                {
                    _logger.LogWarning("User account locked out.");
                    return RedirectToPage("./Lockout");
                }
                else
                {
                    ModelState.AddModelError(string.Empty, "Invalid login attempt.");
                    return Page();
                }
            }

            // If we got this far, something failed, redisplay form
            return Page();
        }
    }
}


1 Ответ

0 голосов
/ 15 апреля 2020

Если вы хотите вызывать метод записи входа в систему для идентификации личности из клиентского проекта angular, вам необходимо включить CORS на сервере API.

Чтобы включить CORS в вашем API отредактируйте файл Startup.cs. В методе ConfigureServices добавьте CORS и политику по умолчанию:

services.AddCors(options =>
{
  options.AddPolicy("CorsPolicy",
    builder => builder.WithOrigins("http://localhost:44305")
    .AllowAnyMethod()
    .AllowAnyHeader()
    .AllowCredentials());
});

В методе Configure сообщите приложению использовать CorsPolicy для всех запросов.

    app.UseRouting();

    app.UseCors("CorsPolicy");

   // ...

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });

Тогда вы можете позвонить по URL 'https://localhost:44355/Identity/Account/Login' в запросе на вход в систему в angular. Вы можете сослаться на ссылку ниже, которая представляет вам полный пример использования asp. net аутентификации ядра Identity, авторизации токена JWT в asp. net core web api:

https://fullstackmark.com/post/13/jwt-authentication-with-aspnet-core-2-web-api-angular-5-net-core-identity-and-facebook-login

Вы можете адаптировать его исходный код к asp. net core 3.1 с пакетами 3.1.

...