.net core facebook 容易进的一个坑

Microsoft.AspNetCore.Authentication.Facebook 库

 

                services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
                    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
                    {
                        options.DataProtectionProvider = CreateRedisDataProtectionProvider(ConnectionMultiplexer.Connect($"{redisConnectionString},defaultDataBase=1"));
                        //options.DataProtectionProvider = DataProtectionProvider.Create(new DirectoryInfo(@"C:\_xx_sso"));
                        options.SlidingExpiration = true;
                        options.LoginPath = "/Account/SignIn";
                        options.Cookie = new CookieBuilder()
                        {
                            HttpOnly = true,
                            Name = $".{GetType().Namespace}",
                        };
                    })
                    .AddFacebook(FacebookDefaults.AuthenticationScheme, o =>
                     {
                         o.AppId = Configuration.GetSection("FacebookDeveloper").GetValue<string>("AppId");
                         o.AppSecret = Configuration.GetSection("FacebookDeveloper").GetValue<string>("AppSecret");
                         o.SaveTokens = false;
                         o.CallbackPath = new PathString("/signin-facebook");
                         o.Events = new Microsoft.AspNetCore.Authentication.OAuth.OAuthEvents
                         {
                             OnRemoteFailure = context =>
                             {
                                 if(context.Request.Query["error"] == "access_denied" && context.Request.Query["error_code"] == "200" && context.Request.Query["error_description"] == "Permissions+error" && context.Request.Query["error_reason"] == "user_denied")
                                    context.Response.Redirect("/Account/SignIn");
                                 else
                                    context.Response.Redirect("/Profile");
                                 context.HandleResponse();
                                 return Task.CompletedTask;
                             }
                         };
                     });

 

必须要有 context.HandleResponse(); 否则无法跳转。

posted @ 2019-05-01 23:54  wintersoft  阅读(289)  评论(0编辑  收藏  举报