Идентификация не работает с авторизацией facebook - PullRequest
1 голос
/ 17 июня 2019

Как и в заголовке, у меня проблема с фейсбуком и личностью.Я использовал документацию Microsoft для реализации идентификации и авторизации на Facebook для своего проекта.Я могу войти с личностью, но когда я пытаюсь войти с Facebook, ничего не происходит.Мой клиент получает cookie ("identity.external"), но View не видит, что пользователь в сети.

В View у меня есть метод:

 @if (User.Identity.IsAuthenticated)

Мой метод контроллера для входа в Facebook

    public IActionResult SignIn(String provider)
    {
        return Challenge(new Microsoft.AspNetCore.Authentication.AuthenticationProperties { RedirectUri = "/" }, provider);
    }

моя начальная конфигурация

 services.Configure<CookiePolicyOptions>(options =>
        {
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });
        services.AddDbContextPool<StoreContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("StoreDatabase")));

        services.AddIdentity<IdentityUser, IdentityRole>().AddEntityFrameworkStores<StoreContext>();
        services.AddMemoryCache();

        //session
        services.AddDistributedMemoryCache();
        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
        services.AddSession(options =>
        {
            options.Cookie.Name = ".MyName";
            options.IdleTimeout = TimeSpan.FromMinutes(30);
            options.Cookie.HttpOnly = true;
            // Make the session cookie essential
            options.Cookie.IsEssential = true;

        });
        services.AddHttpContextAccessor();
        //session

        services.AddAuthentication(options =>
        {
            //options.DefaultChallengeScheme = FacebookDefaults.AuthenticationScheme;
            //options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            //options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        })
            .AddFacebook(options =>
            {
                options.AppId = "CODE";
                options.AppSecret = "CODE";
            }).AddCookie();

        services.AddMvc(options =>
        {
            var policy = new AuthorizationPolicyBuilder()
            .RequireAuthenticatedUser()
            .Build();
            options.Filters.Add(new AuthorizeFilter(policy));
        }
        ).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

Когда я раскомментирую

            //options.DefaultChallengeScheme = FacebookDefaults.AuthenticationScheme;
        //options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        //options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;

Тогда Facebook работает, но личность не работает.

Спасибо!

1 Ответ

0 голосов
/ 19 июня 2019

Эта авторизация на Facebook очень сложная.Я публикую остальные методы контроллера для остальных людей.

        public async Task<IActionResult> ExternalLoginCallback(string returnUrl)
    {
        ExternalLoginInfo info = await signInManager.GetExternalLoginInfoAsync();

        var result = await signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false);

        if (result.Succeeded)
        {
            return RedirectToLocal(returnUrl);

        }
        else
        {
            var user = new ApplicationUser
            {
                UserName = info.Principal.FindFirstValue(ClaimTypes.Email),
                Email = info.Principal.FindFirstValue(ClaimTypes.Email),
                UserData = new UserData { Email = info.Principal.FindFirstValue(ClaimTypes.Email) }
            };
            var registrationResult = await userManager.CreateAsync(user);
            if (registrationResult.Succeeded)
            {
                registrationResult = await userManager.AddLoginAsync(user, info);
                if (registrationResult.Succeeded)
                {
                    await signInManager.SignInAsync(user, isPersistent: false);
                    return RedirectToLocal(returnUrl);
                }
                else
                    throw new Exception("trut Błąd! External provider assocation error");
            }
            else
                throw new Exception("trut błąd! Registration error");
        }

    }

и метод входа

        public IActionResult SignIn(string provider, string returnUrl)
    {

        var properties = signInManager.ConfigureExternalAuthenticationProperties("Facebook", Url.Action("ExternalLoginCallback", "Account", new { returnUrl = returnUrl}));
        return Challenge(properties, "Facebook");

    }
...